C# 如何设置Expect调用以检查Rhino Mock中是否未调用方法
使用Rhino mock,我如何确保在设置对模拟对象的期望时不调用方法 在我的示例中,我正在测试Commit方法,我需要确保在执行Commit时不调用Rollback方法。(这是因为我在commit方法中有逻辑,如果commit失败,它将自动回滚) 下面是代码的样子C# 如何设置Expect调用以检查Rhino Mock中是否未调用方法,c#,unit-testing,rhino-mocks,C#,Unit Testing,Rhino Mocks,使用Rhino mock,我如何确保在设置对模拟对象的期望时不调用方法 在我的示例中,我正在测试Commit方法,我需要确保在执行Commit时不调用Rollback方法。(这是因为我在commit方法中有逻辑,如果commit失败,它将自动回滚) 下面是代码的样子 [Test] public void TestCommit_DoesNotRollback() { //Arrange var mockStore = MockRepository.GenerateMock<
[Test]
public void TestCommit_DoesNotRollback()
{
//Arrange
var mockStore = MockRepository.GenerateMock<IStore>();
mockStore.Expect(x => x.Commit());
//here i want to set an expectation that x.Rollback() should not be called.
//Act
subject.Commit();
//Assert
mockStore.VerifyAllExpectation();
}
但我想首先把这作为一种期望。这就是你想要的吗
ITest test = MockRepository.GenerateMock<ITest>();
test.Expect(x => x.TestMethod()).AssertWasNotCalled(mi => {});
ITest test=MockRepository.GenerateMock();
Expect(x=>x.TestMethod()).AssertWasNotCalled(mi=>{});
另一个选项是:
mockStore.Expect(x => x.Rollback()).Repeat.Never();
这是另一个选择:
mockStore.Stub(x => x.DoThis()).Repeat.Times(0);
//EXECUTION HERE
x.VerifyAllExpectations();
对于这种情况,我创建了一个扩展方法来更好地显示我的意图
public static IMethodOptions<RhinoMocksExtensions.VoidType> ExpectNever<T>(this T mock, Action<T> action) where T : class
{
return mock.Expect(action).IgnoreArguments().Repeat.Never();
}
publicstaticimethodoptions ExpectNever(这个T mock,Action-Action),其中T:class
{
返回mock.Expect(action.IgnoreArguments().Repeat.Never();
}
请注意IgnoreArguments()调用。我假设您永远都不希望调用该方法……不管参数值是什么。很好奇为什么要使用Expectation,而不仅仅是使用AssertWasNotCalled?@Cousken AssertWasNotCalled()似乎不适用于BackToRecord()和Replay(),也许这就是原因吧??
public static IMethodOptions<RhinoMocksExtensions.VoidType> ExpectNever<T>(this T mock, Action<T> action) where T : class
{
return mock.Expect(action).IgnoreArguments().Repeat.Never();
}