2014-11-03 16 views
0

조롱 프레임 워크로 NSubstitute를 사용하는 동안 메서드가 MSpec에서 호출되었다고 주장하려고합니다. Subject에는 ExecuteAll()의 빈 구현이 있습니다. 실패해야하지만 통과합니다!Subject에 구현이없는 경우이 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(); 
} 

다른 어설 션을 사용해 보았지만 지나쳤습니다. 이 자체가 내가 NSubstitute을 제거하고 MOQ로 대체 Execute()

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

로 호출하는 것 같다. Execute() 가상화에 대한 오류를 수정 한 후 작동했습니다. NSubstitute가 도청되었거나 오류를 올바르게보고하지 않습니까?

+1

아무 것도 말하지 않고 -1을 주었으므로이 질문을 어떻게 개선 할 것인지 잘 모르겠습니다. 나는 내가 무엇을 시도했는지, 무엇을 성취하려고하는지, 그리고 어떤 코드를 제공했는지에 대해 잘 쓰여진 영어로 설명했다고 믿는다. 내가 뭔가를 놓친다면 알려주세요. 거기에 -1을 던지면 아무에게도 도움이되지 않습니다. – 4imble

+0

귀하의 질문은 실제로 꽤 좋은 것입니다. 제목과 일부 서식을 수정했습니다. 중요한 질문은 NSubstitute가 (비) 가상 메서드를 처리하는 방법이라고 생각합니다! –

+0

고마워, 네 말이 맞아,하지만 그건 처음에는 그게 문제인지 몰랐어. :) 우리가 더 많이 알았으니 이제 그것을 분명히 해줘서 고마워. – 4imble

답변

0

좋습니다. Moq가 가상 메서드가 아니라는 오류를 표시 한 후에 NS substitute를 다시 넣으면 작동합니다. 만약 내가 비 가상으로 다시 메서드를 변경하면 다시 shouldn 될 때 전달됩니다.

NSubstitute에 문제가 발생했습니다. moq와 같은 오류가 발생하면 좋을 것입니다.

+0

나는 훌륭한 Mocking 라이브러리 인 FakeItEasy를 좋아합니다. 큰 오류 메시지가 있습니다 .-) –

+0

NSubstitute 문제로 연결 하시겠습니까? –

+0

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