2017-02-10 10 views
0

У меня есть следующий класс с функцией Log, который для цели тестирования просто возвращает 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 

Результат BOOL не установлен в ложь, а правда. Это заставляет меня полагать, что моя установка неверна. Это так?

+0

Это происходит потому, что вы не называется 'Log)' метод закачанного экземпляра регистратора (. Вызовите 'logger.Log()' внутри вашего метода 'SomeClass''' – Developer

+1

Просьба представить реализацию вашего метода' Log', объявленного в 'SomeClass'. Скорее всего, вы не вызываете функцию журнала вашего регистратора. – Rafal

ответ

1

Это потому, что вы не вызвали метод инъецируемого экземпляра регистратора Log(). Вызов logger.Log() внутри SomeClass метода Log

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

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

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