我有一个单元测试,我正在检查某个方法是否被调用过一次,所以我尝试这种方式:-
这是我的ILicenseManagerService模拟,正在通过构造函数传递其对象。

    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);
但是,当我运行单元测试时,出现了一个异常(exception),该根本没有说say方法。
我在哪里做错了?
编辑 @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);


        }

最佳答案

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

通过调用LicenseManagerService属性,您可以创建一个新的模拟对象。自然,从未在此实例上执行任何调用。

您应该更改此属性的实现,以使其在每次调用时都返回相同的实例。

10-07 19:54
查看更多