2014-06-25 16 views
9

mam badanej jednostki Jestem sprawdzenie, czy metoda jest wywoływana raz, czy też nie, więc próbowali w ten sposób: -Sprawdź metoda nazywa się lub nie w jednostce testowej

To mój Mock z ILicenseManagerService i jestem przechodzącej jego obiekt za pośrednictwem 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; 
    } 

Używam tego atrapa obiektu w celu ustawienia _licenseManagerService i wywołanie LoadProductLicenses() w metodzie badany. lubię to. licencje przychodzą dobrze.

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

Moja próba do weryfikacji wywołanie tej metody -

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

Ale kiedy runiczny mój test jednostkowy przyjście wyjątkiem powiedzieć, że metoda nie jest invocked w ogóle. gdzie robię źle?

EDYTOWANIE @dacastro Wzywam ten sam próbny tutaj jest mój test jednostkowy.

[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); 


    } 

Odpowiedz

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

Dzwoniąc właściwość LicenseManagerService, jesteś tworząc nowy atrapa obiektu. Oczywiście w tym przypadku nie przeprowadzono żadnych inwokacji.

Należy zmienić implementację tej właściwości, aby zwracać tę samą instancję za każdym razem, gdy zostanie wywołana.

+0

Jestem pewien, że używam tego samego obiektu próbnego. możesz zobaczyć edycję. – loop

+0

@loop można opublikować definicję 'InAppMock.LicenseManagerService'? – dcastro

+0

Jest na szczycie. Właściwie LicenamesManagerService jest jedną z właściwości klasy InAppMock. Zasadniczo klasa InAppMock dostarcza makiety zewnętrznych zależności. Zrobiłem, aby użyć go w wielu przypadkach testowych. – loop

Powiązane problemy