2014-11-03 2 views
0

Я пытаюсь утверждать, что метод был вызван в MSpec при использовании NSubstitute в качестве насмешливой структуры. Subject имеет пустую реализацию ExecuteAll(). Он должен потерпеть неудачу, но он пройдет!Как проходит тест MSpec/NSubstitute, когда объект не имеет реализации?

public class When_told_to_execute_all_it_should_execute_all_commands 
    : WithSubject<CommandHandler> 
{ 
    static AddTaskCommand command1; 
    static AddTaskCommand command2; 

    Establish context =() => 
    { 
     command1 = An<AddTaskCommand>(); 
     command2 = An<AddTaskCommand>(); 
     Subject.AcceptCommand(command1); 
     Subject.AcceptCommand(command2); 
    }; 

    Because of =() => Subject.ExecuteAll(); 

    It should_have_called_execute_on_command_1 =() => command1.Received().Execute(); 
    It should_have_called_execute_on_command_2 =() => command2.Received().Execute(); 
} 

Я пробовал использовать другое утверждение, но оно тоже проходит! Кажется, что это само по себе ставит под Execute()

command1.WasToldTo(x => x.Execute()); 

я удалил NSubstitute и заменил его Moq. После исправления ошибки об изготовлении виртуальной машины Execute() она сработала. Является ли NSubstitute ошибкой или неверным сообщением об ошибках?

+1

Поскольку вы дали мне -1, ничего не сказав, я не уверен, как вы хотите, чтобы я улучшил этот вопрос. По-моему, я объяснил на хорошо написанном английском то, что я пробовал, чего я пытаюсь достичь и предоставил какой-то код. Если я что-то упустил, дайте мне знать. Просто бросать -1 туда не помогает никому. – 4imble

+0

Ваш вопрос на самом деле довольно хороший. Я изменил название и некоторое форматирование. Я думаю, что важным вопросом является то, как NSubstitute обрабатывает этот (не) виртуальный метод! –

+0

Спасибо, ты прав, но я не знал, что это была проблема изначально :). Спасибо, что разъяснил это сейчас, что мы знаем больше. – 4imble

ответ

0

Хорошо, после того, как Moq ошибся, что метод не был виртуальным Я вернул NSubstitute и работаю. Если я изменю метод обратно на не виртуальный, он пройдет, когда он не будет снова.

Я создал проблему для NSubstitute, было бы неплохо, если бы она дала ошибку, такую ​​как moq.

+0

Мне нравится FakeItEasy отличная насмешливая библиотека, плюс у нее отличное сообщение об ошибке ;-) –

+0

Не могли бы вы ссылаться на проблему NSubstitute? –

+0

https://github.com/nsubstitute/NSubstitute/issues/166 – 4imble