J'ai un test unitaire je vérifie si une méthode est appelée une fois ou non alors j'ai essayé de cette façon: -
Ceci est ma maquette de ILicenseManagerService et je passe son objet à travers le constructeur.
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;
}
J'utilise cet objet factice pour définir _licenseManagerService et j'appelle LoadProductLicenses () dans la méthode en cours de test. comme ça. les licences arrivent très bien.
var licenses = (await _licenseManagerService.LoadProductLicenses()).ToList();
Ma tentative de vérification de l'appel à cette méthode -
LicenseManagerService.Verify(m => m.LoadProductLicenses(),Times.Once);
Mais lorsque j'exécute mon test unitaire, une exception arrive indiquant que la méthode n'est pas du tout invockée. où je me trompe?
MODIFIER @dacastro J'invoque la même maquette ici est mon test unitaire.
[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);
En appelant la propriété LicenseManagerService
, vous créez un objet maquette new. Naturellement, aucune invocation n'a jamais été effectuée sur cette instance.
Vous devez modifier l'implémentation de cette propriété pour renvoyer la même instance à chaque appel.