【发布时间】:2016-08-13 04:14:06
【问题描述】:
我有一个单元测试,例如:
[Test]
public void ThingController__Put__when_thing_is_invalid__then__throws()
{
var controller = this.CreateThingController();
try
{
var r = controller.Put("thing1", this.CreateInvalidThing());
}
catch(HttpResponseException hrex) when (hrex.Response.StatusCode == HttpStatusCode.BadRequest)
{
return; // implicit pass.
}
catch(Exception ex)
{
Assert.Fail($"Wrong exception {ex.GetType().Name}");
}
Assert.Fail("No exception thrown!");
}
但它总是命中最后一个Fail,即不会抛出异常。我已经打开了第一次机会异常,并且可以看到它被抛出并且一直被重新抛出。它肯定一直在冒泡。
注意:SO 将其标记为可能的重复
Unit testing async method for specific exception
这个问题是一个方法,但这个问题是一个问题解决方案,特别是为什么 catch 没有被击中,即你知道怎么做,但是犯了一个常见的错误,忘记了动作是异步的 - 因为他们通常没有Async 后缀 - 并且需要展开。
【问题讨论】:
标签: c# unit-testing async-await