【发布时间】:2018-04-23 12:04:27
【问题描述】:
我在 C# 中使用 Moq 测试框架,并尝试创建一个单元测试,其中我有一个方法可以通过不可靠的网络调用远程服务器上的服务。
在我尝试进行单元测试的方法中,我有以下代码:
Task.Factory.StartNew(() => this.remoteClient.SomeMethod(userDetails)).Wait(Timespan.FromSeconds(10));
单元测试的目的是模拟出服务在 10 秒内没有响应的超时时间。
到目前为止,我的单元测试如下,它确实有效,但我觉得它不太正确。
mockRemoteClientService.Setup(r =>r.SomeMethod(It.IsAny<string>())).Callback(() => Thread.Sleep(11000));
谁能告诉我我所采取的方法是否正确或有其他方法可以做到这一点?
【问题讨论】:
-
快速观察。你在混合异步和阻塞调用吗?此外,建议避免使用
Task.Factory.StartNew,而是使用Task.Run。也许那时您可以使用具有给定时间跨度的取消令牌来完成。 -
当前状态的问题不清楚,因为它不完整。阅读How to Ask,然后提供minimal reproducible example,可以用来更好地理解您的问题。
-
你看到我放了c# Framework 4.0了吗? Task.Run 在 Framework 4.0# 中不存在,我无法升级版本。因此,我必须使用 Factory.StartNew 方法
-
我的立场是正确的。没注意到那个标签。
-
检查 StartNew 的重载,看看是否有取消令牌。