【发布时间】:2016-01-16 16:01:11
【问题描述】:
我最近开始使用 Rhino,遇到了我无法克服的非常意外的行为。
问题是我有一个存根的基础结构,在我的一项测试中,我需要更改一个预定义存根(在我的基础结构中)以返回与默认值不同的值。
我在下面的代码中重现了这个问题:
[TestFixture]
public class UnitTest1
{
private IWorker _worker;
[SetUp]
void Setup()
{
_worker = MockRepository.GenerateStub<IWorker>();
_worker.Stub(w=>w.DoWork()).Return(0);
}
[Test]
public void DoWork_StubbingFunctionTwice_CallingTheLastStub()
{
int expected = 1;
_worker.Stub(w => w.DoWork()).Return(expected);
int actual =_worker.DoWork();
Assert.AreEqual(expected, actual);
}
}
public interface IWorker
{
int DoWork();
}
有人知道为什么 Rhino 存根会有这样的行为,更重要的是我怎样才能以最干净的方式解决它?
【问题讨论】:
-
这种行为让我大吃一惊。我在许多测试中重用了一个模拟对象。我的一个测试需要模拟来为其中一个存根属性重现不同的结果,所以我只是尝试“覆盖”以前的属性存根,但如下所述,它并不像这样工作。我的解决方案是创建一个单独的模拟对象,而不是重用现有的模拟对象,但我明白这可能不适用于所有情况。
标签: c# unit-testing mocking nunit rhino-mocks