当主题没有实现时,这个MSpec / NSubstitute测试如何通过?

时间:2014-11-03 09:52:05

标签: assertions mspec nsubstitute

我试图断言在使用NSubstitute作为模拟框架时在MSpec中调用了一个方法。 Subject的空实现为ExecuteAll()。它应该失败,但它通过了!

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 个答案:

答案 0 :(得分:0)

好吧,在Moq错误地认为该方法不是虚拟的之后我把NSubstitute重新放入其中并且它正在工作。如果我将方法改回非虚拟状态,那么当它不应该再次通过时,它就会通过。

我为NSubstitute创建了一个问题,如果它给出像moq这样的错误会很好。