Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何设置Expect调用以检查Rhino Mock中是否未调用方法_C#_Unit Testing_Rhino Mocks - Fatal编程技术网

C# 如何设置Expect调用以检查Rhino Mock中是否未调用方法

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<

使用Rhino mock,我如何确保在设置对模拟对象的期望时不调用方法

在我的示例中,我正在测试Commit方法,我需要确保在执行Commit时不调用Rollback方法。(这是因为我在commit方法中有逻辑,如果commit失败,它将自动回滚)

下面是代码的样子

[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();
}