web-dev-qa-db-ja.com

ユニットテストでメソッドが呼び出されているかどうかを確認する

私はユニットテストを持っていますが、メソッドが一度呼び出されたかどうかをチェックしているので、私はこのように試みました:-

これは私のILicenseManagerServiceのモックであり、オブジェクトをconstrustorに渡します。

public Mock<ILicenseManagerService> LicenseManagerService { get { return SetLicenseManagerServiceMock(); } }

    private Mock<ILicenseManagerService> SetLicenseManagerServiceMock()
    {
        var licencemangerservicemock = new Mock<ILicenseManagerService>();
        licencemangerservicemock.Setup(m => m.LoadProductLicenses()).Returns(ListOfProductLicense).Verifiable();

        return licencemangerservicemock;
    }

    public static async Task<IEnumerable<IProductLicense>> ListOfProductLicense()
    {
        var datetimeoffset = new DateTimeOffset(DateTime.Now);

        var lst = new List<IProductLicense>
        {
            GetProductLicense(true, datetimeoffset, false, "1"),
            GetProductLicense(true, datetimeoffset, false, "2"),
            GetProductLicense(true, datetimeoffset, true, "3")
        };

        return lst;
    }

このモックオブジェクトを使用して_licenseManagerServiceを設定し、テスト対象のメソッドでLoadProductLicenses()を呼び出しています。このような。 ライセンスは順調です。

var licenses = (await _licenseManagerService.LoadProductLicenses()).ToList();

このメソッドの呼び出しを確認するための私の試み-

 LicenseManagerService.Verify(m => m.LoadProductLicenses(),Times.Once);

しかし、ユニットテストを実行すると、メソッドが呼び出されないという例外が発生します。どこで間違っていますか?

[〜#〜] edit [〜#〜] @dacastro私はここで同じモックを呼び出していますが、これはユニットテストです。

[TestMethod]
    [TestCategory("InApp-InAppStore")]
    public async Task return_products_from_web_when_cache_is_empty()
    {
        // this class basically for setting up external dependencies
        // Like - LicenceManagerService in context, i am using this mock only no new mock.
        var inAppMock = new InAppMock ();                  


        // object of Class under test- I used static method for passing external         
        //services for easy to change 
        var inAppStore = StaticMethods.GetInAppStore(inAppMock);

        // method is called in this method
        var result = await inAppStore.LoadProductsFromCacheOrWeb();

        // like you can see using the same inAppMock object and same LicenseManagerService
        inAppMock.LicenseManagerService.Verify(m => m.LoadProductLicenses(),Times.Once);


    }
16
loop
LicenseManagerService.Verify(m => m.LoadProductLicenses(),Times.Once);

LicenseManagerServiceプロパティを呼び出すことで、newモックオブジェクトを作成しています。当然のことながら、このインスタンスで呼び出しは実行されていません。

このプロパティの実装を変更して、呼び出されるたびに同じインスタンスを返すようにする必要があります。

21
dcastro