我有以下代码。我有一些合理的理由对该属性进行两次存根(参见下面的解释)。看起来它只让我存根一次。
private IStatus _status;
[SetUp()]
public void Setup() {
this._status = MockRepository.GenerateStub<IStatus>();
this._status.Stub(x => x.Connected()).Return(true);
// This next line would usually be in the Setup for a subclass
this._status.Stub(x => x.Connected()).Return(false);
}
[Test()]
public void TestTheTestFramework() {
Assert.IsFalse(this._status.Connected()); // Fails...
}
public interface IStatus {
bool Connected { get; }
}
我尝试下载最新版本(3.6 build 21),但仍然有同样的问题。关于为什么我不能这样做的任何想法?我尝试将Connected
属性更改IStatus
为函数,但测试仍然失败。我在 VB.Net 中得到相同的行为......错误?
双截断的解释
我正在围绕继承构建我的测试。这样我就可以只做一次通用设置代码,使用注入的模拟依赖项来模拟不同的条件。我可能会提供一个基本/默认存根值(例如,是的,我们已连接),我想在子类中覆盖它,以在连接断开时测试 SUT 的行为。我通常会得到这样的代码。
[TestFixture()]
public class WhenPublishingAMessage {
// Common setup, inject SUT with mocked dependencies, etc...
[Test()]
public void ShouldAlwaysWriteLogMessage {
//Example of test that would pass for any sub-condition
}
[TestFixture()]
public class AndNoConnection : WhenPublishingAMessage {
// Do any additional setup, stub dependencies to simulate no connection
// Run tests for this condition
}
[TestFixture()]
public class AndHaveConnection : WhenPublishingAMessage {
// Do any additional setup and run tests for this condition
}
}
编辑
Rhino Mocks google group 上的这篇文章可能会有所帮助。看起来我可能需要打电话this._status.BackToRecord();
来重置状态,可以这么说......另外,.Repeat.Any()
加入第二个存根语句似乎也有帮助。稍后我将不得不发布更多详细信息。