【发布时间】:2014-06-25 07:44:08
【问题描述】:
我有一个单元测试我正在检查一个方法是否被调用一次,所以我尝试了这种方式:-
这是我对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);
但是当我运行我的单元测试时,根本不会调用 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);
}
【问题讨论】:
标签: c# unit-testing tdd moq