首页 > 解决方案 > 如何确保不再调用 RhinoMocks 中的方法?

问题描述

我有一个代码,如下所示:

public interface IDependency
{
    void Foo();
}


public class MainClass{

    Timer tmr = new Timer(100);
    IDependency dependency;

    public MainClass(IDependency dep)
    {
        dependency = dep;
        tmr.Elapsed += OnElapsed;
    }

    void OnElapsed(object sender, EventArgs e)
    {
        dependency.Foo();
    }

    public void Start()=> tmr.Start();
    public void Stop() => tmr.Stop();

}

使用 RhinoMock 和/或 nunit,我想进行单元测试,一旦调用“停止”,IDependency.Foo就不再调用

尝试使用BackToRecordand ReplayAll,但无法达到目标。调用AssertWasNotCalled后调用不会失败Stop()

有没有办法达到同样的效果?

标签: c#unit-testingrhino-mocks

解决方案


在 Nkosi 回答之后,您可以使用 Rhino Mocks 进行操作(另请参阅此问题中的一些讨论):

[Test]
public async Task MainClass_Should_Stop() {
    //Arrange
    var dependency = MockRepository.GenerateMock<IDependency>();
    var subject = new MainClass(dependency);
    var expectedDelay = 200;
    var expectedCalls = 2;

    //Act
    subject.Start();
    await Task.Delay(expectedDelay);
    subject.Stop();
    await Task.Delay(100);

    //Assert
    dependency.AssertWasCalled(
      dependency => dependency.Foo(),
      options => options.Repeat.Times(expectedCalls)
  );
}

推荐阅读