2017-02-10 3 views
0

Ich habe die folgende Klasse mit einer Log-Funktion, die für den Test-Zweck nur wahr zurückgibt.Moq: Moq ist Setup, aber ich glaube nicht, es heißt

public SomeClass : ILogger 
{ 
    // Other functions 

    public bool Log() 
    { 
     return true; 
    } 

} 

Wie in meinem Unit-Test habe ich die folgenden:

Mock<ILogger> logger = new Mock<ILogger>(); 
logger.Setup(func => func.Log()).Returns(() => false).Verifiable(); 

SomeClass testMe = new SomeClass(logger.Object); 
bool result = testMe.Log(); 

logger.Verify(); //This fails saying that the Log function was never called 

Das Boolesche Ergebnis nicht auf false gesetzt ist, aber wahr. Das lässt mich glauben, dass mein Setup falsch ist. Ist das der Fall?

+0

Das ist, weil Sie nicht 'Log()' Methode der injizierten Logger-Instanz aufgerufen haben. Rufen Sie 'logger.Log()' in Ihrer 'SomeClass'' Log' Methode auf – Developer

+1

Bitte stellen Sie die Implementierung Ihrer Methode 'Log' bereit, die auf' SomeClass' deklariert ist. Höchstwahrscheinlich rufen Sie die Protokollfunktion Ihres Loggers nicht auf. – Rafal

Antwort

1

Das ist, weil Sie Log() Methode der injizierten Logger-Instanz nicht aufgerufen haben. Rufen Sie logger.Log() in Ihrem SomeClass Log-Methode

public SomeClass : ILogger 
{ 
    private ILogger logger; 
    // Other functions 

    public SomeClass(ILogger logger) 
    { 
    this.logger = logger; 
    }  

    public bool Log() 
    { 
     return logger.Log(); 
     //return true; 
    } 
}