2014-06-25 2 views
9

Ich habe ein Unit-Test-i Überprüfung ist, ob eine Methode einmal aufgerufen wird oder nicht, so dass ich auf diese Weise versucht: -Stellen Sie sicher, eine Methode aufgerufen wird oder nicht in Einheit Test

Das ist mein Mock von ILicenseManagerService und ich bin vorbei ihr Gegenstand durch den Contrustor.

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; 
    } 

Ich bin mit diesem Mockobjekt _licenseManagerService zu setzen und die LoadProductLicenses() in der Methode im Test aufrufen. so was. Lizenzen kommen gut.

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

Mein Versuch für den Aufruf dieser Methode überprüfen -

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

Aber wenn ich meine Unit-Test eine Ausnahme kommenden runing, die sagen Methode überhaupt nicht invocked wird. wo ich falsch mache?

BEARBEITEN @dacastro Ich berufe den gleichen Mock hier ist meine Einheit Test.

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


    } 

Antwort

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

Durch die LicenseManagerService Eigenschaft aufrufen, sind Sie ein Objekt neue Mock zu schaffen. Natürlich wurden bei dieser Instanz noch keine Aufrufe durchgeführt.

Sie sollten die Implementierung dieser Eigenschaft so ändern, dass bei jedem Aufruf dieselbe Instanz zurückgegeben wird.

+0

Ich bin sicher, dass ich das gleiche Mock-Objekt verwende. Kannst du den Schnitt sehen? – loop

+0

@loop können Sie die Definition für 'InAppMock.LicenseManagerService' veröffentlichen? – dcastro

+0

Es ist an der Spitze. Tatsächlich ist LicenseManagerService eine der Eigenschaften von InAppMock Class.Basically InAppMock Klasse bieten Mock von externen Abhängigkeiten. Ich habe es getan, um es in mehreren Testfällen zu verwenden. – loop

Verwandte Themen