MSTest 无法退出

来源:互联网 发布:程序员创业项目 编辑:程序博客网 时间:2024/06/07 17:31

最近给系统配置持续集成工具. 我们用 Stash 做源码管理, 用 TeamCity 来做编译, 并通过 TeamCity 来分析单元测试覆盖率和代码质量, 把结果发布到 sonar 页面上面. 在 TeamCity 里面, 我们配置了 VS Test Runner --> MSTest 来运行单元测试. 现在的问题是我们所有的单元测试都能够通过. 但是 MSTest.exe 运行完不能正常退出, 一直卡在: Default Test Setting. 上网查了说是可能单元测试里面开了一个死循环线程, 单测结束后线程没有完全退出, 导致 MSTest.exe 也没法退出. 据说 机器上同时安装 VS 2010, VS 2012 会有这个问题, 可以通过安装 windows 补丁包来解决这个问题, 但是由于我们的测试在别人的服务器上面运行, 我们不能去安装补丁包, 只能找出到底是哪个测试导致测试进程无法退出. 

由于无法确认是哪个测试导致这个问题, 只能退回到上一次 check in  的代码, 然后往里面一点点加上新改动, 每次加上一点改动就在本地运行自动测试, 看是否测试进程无法退出. 注意运行 Visual Studio 集成的单测会发现所有测试都通过, 但是没法发现测试进程无法退出的问题, 可以在 cmd 控制台运行 MSTest. 

在本地运行 MSTest.exe, cmd: MSTest.exe /testcontainer projName/test.dll /noisolation

这样一点点加上新改动, 发现是在把之前的一个测试删除之后导致的问题. 也就是说这个单元测试必须被执行, 否则测试进程就会卡住. 查看测试代码, 发现那里面设置了两个静态变量, 这两个变量会影响到别的测试项. 如果这两个测试项的值是合法的值, 那么另一个测试方法就会运行的时候就会启动一个线程, 这个线程永远不会退出. 在这次改动之前, 由于我们在这个测试里面设置了不合法的值, 所以另外那个测试就不会启动线程, 但是在这个改动里面, 我把这个测试方法删掉了, 然后两个静态变量就一直都是合法的了, 于是导致另外测试方法会去启动线程, 于是 MSTest 就无法退出了. 


0 0
原创粉丝点击