2013-02-15 5 views
1

Привет Я пытаюсь узнать о рамках MOq, но я, кажется, не понимают простой concept.Here это код Я проверяю:Moq не возвращает сообщение на NUnit консоли

public interface ILongRunningLibrary { 
    string RunForALongTime(int interval); 
} 

public class LongRunningLibrary : ILongRunningLibrary { 

    public string RunForALongTime(int interval) { 
     var timeToWait = interval * 1000; 
     Thread.Sleep(timeToWait); 

     return string.Format("Waited {0} seconds ", interval); 
    } 
} 

И вот мои тесты:

private Mock<ILongRunningLibrary> _longRunningLibrary; 

    [SetUp] 
    public void SetupForTest() { 
     _longRunningLibrary = new Mock<ILongRunningLibrary>(); 
    } 

    [Test] 
    public void TestLongRunningLibrary() { 
     const int interval = 30; 
     _longRunningLibrary.Setup(lrl => lrl.RunForALongTime(30)) 
          .Returns("This method has been mocked!"); 
     var result = _longRunningLibrary.Object.RunForALongTime(interval); 
     Debug.WriteLine("Return from method was '{0}'", result); 
    } 

из того, что я понял из книги, которую я читаю, что этот метод должен возвращать на NUnit консоли «Этот метод был издевались» .Но в моем случае тест пройден, и он ничего не возвращает.

Даже если я удалю:

_longRunningLibrary.Setup(lrl => lrl.RunForALongTime(30)) 
          .Returns("This method has been mocked!"); 

Испытание все еще проходит, и на консоли ничего не печатается.

Почему это «этот метод был издевательством» не возвращается на консоли NUnit?

+0

Возможный дубликат [Как просмотреть отчеты Debug.WriteLine при использовании TestDriven.Net ?] (http://stackoverflow.com/questions/173641/how-do-i-see-debug-writeline-statements-when -при-testdriven-нетто) – nemesv

ответ

2

Ваш первый пример работает просто отлично. Я думаю, что ваш тестовый бегун не может вызвать Debug.WriteLine. Я заменил его на Console.WriteLine, и я получил правильный результат.

Когда вы удалили вызов Setup во втором примере, mock вернет значение по умолчанию (которое равно null), поскольку оно использует поведение Loose. Когда вы вызываете Debug.WriteLine с нулевым параметром, он не генерирует исключение, поэтому ваш тест проходит.

Рекомендуется использовать StrictBehavior в целом.

_longRunningLibrary = new Mock<ILongRunningLibrary>(MockBehavior.Strict); 

Теперь он выдаст исключение, потому что у вас нет настроек для метода RunForALongTime.

0

хорошо ... Я сталкивался с такой же вопрос сегодня, и я считаю, что я нашел истинную причину:

просто пойти в GUI NUnit, а затем View-> Результат tabs-> Текст Выходной ...

Как вы можете видеть, что «Trace Output» не был проверен по умолчанию, проверьте его, а Debug.WriteLine работает как ожидалось ...

, так что вы можете проверить его или использовать Console.WriteLine и оставить его как является.

Смежные вопросы