c# - 如何确保不再调用 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
就不再调用
尝试使用BackToRecord
and ReplayAll
,但无法达到目标。调用AssertWasNotCalled
后调用不会失败Stop()
。
有没有办法达到同样的效果?
解决方案
在 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)
);
}
推荐阅读
- gulp - 在 gulp-lesshint 中对 CSS 声明顺序进行排序
- python - 连接数据框中的列
- javascript - 为什么 Promise 在 Promise 完成之前执行 'then' 子句?
- spring - Spring 集成和 JPA 事务
- docker - Kitematic 将不允许 mysql 容器使用本地存储
- vba - Excel 插件自动化运行问题
- c# - 在体育应用程序 C# 中处理时间
- ios - AVSpeechUtterance 和 Swift 中没有语音/缺少语音
- javascript - 如何使用纯代码方法将 DOM 动画捕获为无损 60fps 视频
- c# - 实体框架:视图中文本字段的值返回 null