自开始以来,我们一直在我们的项目中使用xUnit Framework作为测试框架.目前在项目中有2200多个单元测试,一切似乎都很好.
但昨天我决定在CI版本和夜间版本中运行单元测试.与团队构建控制器战斗运行xunit测试1-2小时我成功运行测试.但是有一个问题,有22个警告关于下面的测试, - Xunit.Sdk.EqualException:Assert.Equal()失败或--System.ArgumentNullException:值不能为null.
经过一些研究后,我意识到这些测试必须失败但似乎已经通过,因为所有这些测试都标有"async"关键字.
实际上应该没有任何错误,因为xUnit支持关于这些帖子的异步测试 http://bradwilson.typepad.com/blog/2012/01/xunit19.html http://sravi-kiran.blogspot.com.tr/ 2012/11 / UnitTestingAsynchronousMethodsUsingMSTestAndXUnit.html Howerver现实对我来说是微不足道的.是的xUnit运行没有任何问题,但没有正确测试.
这是两个小方法.
public async Task<string> AsyncTestMethod() {
throw new Exception("Test");
}
public string NormalTestMethod() {
throw new Exception("Test");
}
Run Code Online (Sandbox Code Playgroud)
正如您只能看到差异,第一个方法定义为"async",这里是对这些方法的两个测试.
[Fact]
public async void XunitTestMethod_Async() {
Program p = new Program();
string result = await p.AsyncTestMethod();
Assert.Equal("Ok", result);
}
[Fact]
public void XunitTestMethod_Normal() {
Program p = new Program();
string result = p.NormalTestMethod();
Assert.Equal("Ok", result);
}
Run Code Online (Sandbox Code Playgroud)
两个原始方法都抛出异常,所以我认为两个测试都会失败但结果却不同.你可以看到结果:

XunitTestMethod_Async测试通过,但XunitTestMethod_Normal失败.抛出异常并非如此,您可以根据需要更改方法内容AsyncTestMethod始终传递.
以下是示例解决方案:https://github.com/bahadirarslan/AsyncTestWithxUnit
我可能会误解或想错,但现在这种行为给我带来了很多痛苦
希望你能引起我的注意.
PS:我在xUnit github页面上创建了一个问题,但我无法确定这是由我还是xUnit造成的.所以我决定在这里问一下.问题:https: …