Tôi có một bài kiểm tra đơn vị tôi đang kiểm tra xem một phương pháp được gọi là một lần hay không vì vậy tôi cố gắng theo cách này: -Xác nhận một phương pháp được gọi là hay không trong Unit Test
Đây là Mock của tôi về ILicenseManagerService và tôi đang đi qua đối tượng của nó thông qua 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;
}
Tôi đang sử dụng đối tượng giả này để đặt _licenseManagerService và gọi phương thức LoadProductLicenses() trong thử nghiệm. như thế này. giấy phép đang hoạt động tốt.
var licenses = (await _licenseManagerService.LoadProductLicenses()).ToList();
nỗ lực của tôi cho kiểm tra cuộc gọi đến phương pháp này -
LicenseManagerService.Verify(m => m.LoadProductLicenses(),Times.Once);
Nhưng khi tôi runing kiểm tra đơn vị của tôi một ngoại lệ sắp tới mà nói phương pháp không được invocked ở tất cả. nơi tôi đang làm sai?
EDIT @dacastro Tôi gọi cùng một mô hình ở đây là thử nghiệm đơn vị của tôi.
[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);
}
tôi chắc chắn rằng tôi đang sử dụng cùng một đối tượng giả. bạn có thể xem bản chỉnh sửa không. – loop
@loop bạn có thể đăng định nghĩa cho 'InAppMock.LicenseManagerService' không? – dcastro
Nó nằm ở vị trí cao nhất. thực sự LiceneseManagerService là một trong những thuộc tính của lớp InAppMock. Về cơ bản, lớp InAppMock cung cấp Mock các phụ thuộc bên ngoài. Tôi đã thực hiện để sử dụng nó trong nhiều trường hợp thử nghiệm. – loop