【发布时间】:2018-06-13 00:44:57
【问题描述】:
在我的单元测试中,我试图从我的接口IPipeline 中模拟出Run() async 方法并模拟延迟,在PipelineScheduler 类中调用它
public interface IPipeline
{
Task Run();
}
测试起订量:
[SetUp]
public void SetUp()
{
_mockPipeline = new Mock<IPipeline>();
_mockPipeline.Setup(x => x.Run()).Returns(async () =>
{
await Task.Delay(3000);
});
_scheduler = new PipelineScheduler(_mockPipeline.Object);
}
但是,当我在调用模拟方法的地方运行测试和调试时
await _pipeline.Run().ConfigureAwait(false);
没有延迟,在这一行之后立即继续执行。
但如果我用存根类替换模拟,延迟工作正常。
private class MockPipeline : IPipeline
{
public async Task Run()
{
await Task.Delay(3000);
}
}
[SetUp]
public void SetUp()
{
_mockPipeline = new MockPipeline();
_scheduler = new PipelineScheduler(_mockPipeline);
}
所以我想问题是我用最小起订量和我的存根类创建延迟的方式有什么不同?
【问题讨论】:
-
.Returns(Task.Delay(3000));是设置运行所需的全部内容。之前的设置很火,忘记async void -
那就是答案,仍然看不到问题中缺少什么。也许它可以稍微调整一下,但主体在那里。
标签: c# unit-testing asynchronous async-await moq