2017-12-22 4 views
2

My Unit-Test gibt mirMoq keine Beschwörungen durchgeführt

"konfiguriert Setups. X => x.GetCount (It.IsAny(), It.IsAny()) Keine Beschwörungen durchgeführt"

Dies ist die Methode unter:

private IService Client = null; 
public void CountChecks() 
{ 
    Client = new ServiceClient(); 
    var _amount = Client.GetCount(value01, value01); 
} 

Dies ist mein Test-Klasse:

public class CountChecksClassTests 
{ 
    private Mock<IService > service { get; set; } 
    private CountChecksClass { get; set; } 

    [TestInitialize] 
    public void Setup() 
    { 
     service = new Mock<IService>(); 
     service.Setup(x => x.GetCount(It.IsAny<DateTime>(), It.IsAny<DateTime>())); 

     checker = new CountChecksClass();    
    } 

    [TestMethod()] 
    public void GetCountTest() 
    { 
     checker.CountChecks(); 
     service.Verify(x => x.GetCount(It.IsAny<DateTime>(), It.IsAny<DateTime>())); 
    } 
} 

Wenn ich den Test debuggen, wird die Methode aufgerufen. Also, warum erhalte ich einen No Invocations Fehler? Der Fehler tritt bei service.Verify(x => x.GetCount(It.IsAny<DateTime>(), It.IsAny<DateTime>()));

Antwort

2

Jedes Mal, wenn Sie CountChecks Methode aufrufen - Sie eine neue Instanz von IService schaffen, nämlich ServiceClient und weisen Sie auf Ihre Client Eigenschaft Art, dieses Stück:

public void CountChecks() 
{ 
    Client = new ServiceClient(); 
    ... 

Daher Ihre Testmethode nie Aufrufe in eine mocked Instanz der IService, stattdessen ruft die intern erstellte .

Um dies zu beheben, Sie müssen Ihre verspottet Instanz IService in Ihrer CountChecksClass Instanz injizieren, z.B .:

checker = new CountChecksClass(service.Object); 
... 
public CountChecksClass(IService service) 
{ 
    Client = service; 
} 

Und vergessen Sie nicht Client = new ServiceClient(); von CountChecks Verfahren zu entfernen.

0

Sie sollten Setup Ihre Methode wie folgt:

service.Setup(x => x.GetCount(It.IsAny<DateTime>(), It.IsAny<DateTime>())).Returns(/*insert count result*/); 

Dann wird Ihr Mock wird wissen, dass es aufgerufen wurde.

Edit: Außerdem sollte Ihre CountChecks-Methode den Zählwert nicht zurückgeben?