Nunit RhinoMock.BackToRecord不';似乎不适用于例外情况

Nunit RhinoMock.BackToRecord不';似乎不适用于例外情况,nunit,rhino-mocks,Nunit,Rhino Mocks,我已成功使用以下方法重置测试之间的期望值: MyMock.BackToRecord(BackToRecordOptions.Expectations); MyMock.Replay(); 但是,在第二个测试试图对模拟方法抛出异常的情况下,这似乎不起作用: [SetUp] public void Setup() { //reset expectations for each test MockRestQuestionClient.BackToRecord(

我已成功使用以下方法重置测试之间的期望值:

MyMock.BackToRecord(BackToRecordOptions.Expectations);
MyMock.Replay();
但是,在第二个测试试图对模拟方法抛出异常的情况下,这似乎不起作用:

[SetUp]    
public void Setup()
{
        //reset expectations for each test
        MockRestQuestionClient.BackToRecord(BackToRecordOptions.Expectations);
        MockRestQuestionClient.Replay();
}

[Test]
public void Test1() {
    MyMock.Expect(t => t.Something()).Returns(someObject);
}

[Test]
public void Test2() {
    //this works when run individually, but fails if run after Test1
    MyMock.Expect(t => t.Something()).Throw(new Exception());
}
知道我做错了什么吗


谢谢

看起来您对不同的测试用例使用相同的模拟。
您是否有任何特定的理由在测试之间共享模拟

如果您在每个测试中实例化新的模拟对象(在
Setup()
方法中),我假设您的问题应该消失

更新
请阅读关于在测试之间共享数据的好评论

更新2
如果您使用基类设置模拟,那么我建议在基类中使用特定的方法进行设置(例如
Init()
)。此方法应使用属性
[SetUp]
标记

因此,
Init()
将在每个测试之前运行。每个测试中都将使用新的模拟。因此,您不需要重置现有的模拟。

对我来说似乎是很好的代码重用。我们有一个基本测试类,它设置了所有相关测试使用的所有模拟(这在w/Moq中运行良好,但Moq缺少一些功能)。除此之外,Rhinomock在所有情况下都能正常工作。重复使用在多个测试中设置所有模拟的代码是可以的。但在多个测试中重复使用相同的模拟实例是不可以的。请参阅我在answer更新中的建议。我保留地接受答案。我不觉得有任何问题不管怎样,这都是一个令人信服的论据。不重复使用mock的论据,因为mock没有(我认为)它们应该发挥的作用,并不是一个令人信服的理由来说明某事“应该”如何完成了。我认为模拟应该可以重新设置,事实上,除了这种奇怪的情况。所以,我最初的问题仍然没有答案,也许只有Ayende能够回答。