2012-12-15 72 views
2

我已经成功用于以下,以测试之间重置预期工作:RhinoMock.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()); 
} 

任何想法我做错了什么?

谢谢!

回答

0

看来你对不同的测试用例使用相同的模拟。
你有任何具体的理由来分享测试之间的嘲笑?

我认为,如果你实例化新的模仿对象每一试验(在Setup()方法您的问题就会消失。

UPDATE
请阅读测试here之间共享数据的好评。

UPDATE2
如果你使用基类来设置模拟,那么我会建议在基类中设置特定方法(例如Init())。应该标记属性[SetUp]
结果Init()将在每次测试之前运行。每次测试都会使用新鲜的嘲笑。所以你不需要重置现有的模拟。

+0

似乎好的代码重新使用我。我们有一个基础测试类,它可以设置所有相关测试使用的所有模拟(这适用于Moq,但Moq缺少一些功能)。除了这个特殊情况之外,这对RhinoMocks来说也很合适。 – sydneyos

+0

这是好的重新使用*在多个测试中设置所有嘲笑*的代码。但是,在多个测试中重用*相同的模拟实例并不好。看到我的建议如何在答案的更新中做到这一点。 –

+0

我接受有保留的答案。我不觉得有任何方法有令人信服的论据。关于不重新使用mock的理由是因为mock不起作用(我认为)它们应该不是一个有说服力的基础来说明“应该”做什么。嘲笑应该可以重新设置,imo,事实上,他们除了在这种奇怪的情况下。所以,我原来的问题仍然没有得到答复,也许只有Ayende才能回答。 – sydneyos