1

OK我有在VS2013,我不认为有随机单元测试失败

我有一个测试的任何地方解决互联网上的代码覆盖率一代的问题900+的单元测试我的项目正在运行,如果在VS2010

测试套件工作正常(100%合格),如果我在VS2013从菜单中测试运行它们>运行全部通过>套件中的所有测试

但是,如果我想从菜单Test> Analyze Code Coverage> All Tests生成VS2013中的代码覆盖率,那么很多测试(其中500个以上)会失败,在所有

测试运行的详细信息窗口特别的原因包括,因为它无法指出为什么测试失败(下图)的有用信息

test fail with no useful information

注意

  • 测试将通过如果我重新运行特定的测试,或从菜单运行所有测试测试>运行>所有测试
  • 这个问题oc小人我的机器和其他一些随机的,而对于团队的其他成员,代码覆盖率一代工作正常(100%检验合格)
  • 这个问题永远不会发生在VS2010

编辑

添加代码BoreholeRepositoryTest在行98

这只是一个测试的起点

enter image description here

+0

您的测试中可能存在竞争条件或耦合问题,只在某些情况下才会出现。这是不可能的。这些真正的单元测试(例如它们是完全隔离的)还是集成测试混合在一起? –

+0

嗨丹尼尔,那些只是单元测试,没有集成测试。测试是完全独立的(它们可以在vs2010下以任意顺序运行,并且仍然通过) – HuyNA

+0

您可以发布BoreholeRepositoryTest.cs的代码(特别感兴趣的是第98行)? @DanielMann很可能是正确的,因为有一些竞争条件促成了这一点。 (例如,尽管没有人期望共享资源,但资源可能会共享) – Lilshieste

回答

4

我发现我的问题的解决方案

我注意到QTAgent32_40.exe在测试运行过程随机崩溃,导致那些尚未执行的测试失败

的研究有点事后揭示了我的问题的根源

我正在使用xxx.testsettings文件来控制代码覆盖率结果。看起来,VS2013使用了一个更新的测试框架,它与testsettings文件不兼容。如果您使用.testsettings文件,MSTest测试框架将用于运行您的测试。这运行速度更慢,不允许您从第三方测试框架运行测试。

因此,解决方案是:摆脱良好的旧测试设置文件,并按照Microsoft的建议创建一个新的runsettings文件。

解决案例: