【发布时间】:2012-09-24 18:03:47
【问题描述】:
我有以下代码。我有一些合理的理由对该属性进行两次存根(参见下面的解释)。看起来它只让我存根一次。
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; }
}
我尝试下载最新的build(3.6 build 21),但仍然遇到同样的问题。关于为什么我不能这样做的任何想法?我尝试将IStatus 上的Connected 属性更改为一个函数,但测试仍然失败。我在 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
}
}
编辑
这个post Rhino Mocks 谷歌组可能会有所帮助。看起来我可能需要调用this._status.BackToRecord(); 来重置状态,可以这么说......另外,将.Repeat.Any() 添加到第二个存根语句似乎也有帮助。稍后我将发布更多详细信息。
【问题讨论】:
-
要更好地了解
.Repeat.*()的功能,请查看这篇博文:lostechies.com/derickbailey/2010/05/04/…
标签: c# .net nunit rhino-mocks