我创建了一个 xUnit 测试,该测试调用了一个方法两次,以确保第二次调用引发异常,指出类实例正忙。非常简单。
[Fact]
public async Task RunTwice() {
var P = Create();
Task T1 = Task.Run(() => P.Run("test", null));
Task T2 = Task.Run(() => P.Run("test", null));
await Assert.ThrowsAsync<InvalidOperationException>(() => Task.WhenAll(new Task[] { T1, T2 }));
}
问题是,此测试将随机成功或失败!
Run 方法按如下方式启动
public IProcess WorkProcess;
private readonly object lockToken = new object();
public virtual CompletionStatus Run(string fileName, string arguments) {
IProcess P;
lock (lockToken) {
if (WorkProcess != null)
throw new InvalidOperationException();
P = factory.Create();
WorkProcess = P;
}
...
这是在xUnit中购买还是我做错了什么?我知道在xUnit 1.9中添加了异步支持。我使用的是 v2.4.1。
当我查看调试信息时,当测试失败时,仍然会引发异常。
冉冉说
慕桂英4014372
随时随地看视频慕课网APP
相关分类