2017-02-10 61 views
0

我有以下類與日誌功能,爲測試目的只是返回true。Moq:Moq被設置,但不認爲它被稱爲

public SomeClass : ILogger 
{ 
    // Other functions 

    public bool Log() 
    { 
     return true; 
    } 

} 

在我的單元測試如何過我有以下幾點:

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 

的布爾結果未設置爲false,但爲true。這導致我相信我的設置不正確。是這樣嗎?

+0

這是因爲您沒有調用注入記錄器實例的Log()方法。在'SomeClass'' Log'方法內調用'logger.Log()' – Developer

+1

請提供'SomeClass'上聲明的'Log'方法的實現。很可能你不會調用你的記錄器的日誌功能。 – Rafal

回答

1

這是因爲您沒有調用Log()注入記錄器實例的方法。在SomeClass內部撥打logger.Log()對數方法

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

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

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