0

有没有人见过这种非常奇怪的行为?Visual Studio单元测试 - 奇怪的行为

  1. 我有一个解决方案whith70个单元测试。他们都通过我的开发机器。
  2. 无论何时我提交我的更改,我们的持续集成过程都将启动,并且构建框最终将运行相同的70个单元测试。
  3. 构建箱中只有一个测试始终失败。
  4. 错误是在一行中,只有从我们的单元测试数据库获得记录。 (我知道它吸收单元测试依赖于数据,但请不要专注于此,因为它现在不相关)
  5. 最奇怪的是,当我登录自己的构建箱,打开相同的Visual Studio解决方案并手动启动单元测试。结果:全部通过!

有没有人有过这种奇怪的情况?我猜测Cruise Control.NET和MSTest有一些奇怪的事情发生吗?

+0

是的,我的猜测是用户运行测试没有有效的凭据。确保你的测试项目中有一个app.config文件,或者至少将它链接到你真实的配置文件。 – RPM1984 2010-10-06 06:09:07

回答

0

感谢您的意见,但它根本没有任何与凭证有关。 我发现在特定的测试之前运行的其他测试将使我的单元测试数据库处于不一致的状态,因此导致有问题的测试出错。 让你的单元测试依赖数据不是一个好习惯,所以除非你像我一样非常注意它,这是给大家的建议:不要依靠数据来做你的单元测试!确保你拥有所有的好东西,特别是一个好的IOC /依赖注入器容器,这样你的类就可以松散耦合了,你可以轻松地模拟任何你想要单元测试的界面!

1

当然,您的单元测试运行器会生成一个良好的日志,显示确切的异常消息或错误?猜测它有点毫无意义,但“拒绝访问”类错误将是一个明显的候选。设置您使用的任何dbase引擎(您也忘了提及这一点),以便为运行测试的用户帐户提供对表的粗略访问。

0

如说另一个答案,它并没有什么太大的意义去猜测它的时候周围有详细的日志...

但因为我有这种情况好几次,这里有一个猜测反正: CI服务器用于运行测试的帐户可能没有适当的数据库权限。这也可以解释为什么当你手动运行它(然后用你的用户帐户)时,相同的测试成功...

HTH! 托马斯

0

如果您想要在构建服务器上运行系统测试,或者希望能够在任何机器(包括您自己的机器上)上正确运行,那么您必须确保它们的状态是独立的。

对于您的情况,您应该让每个测试init准备其使用的数据库(通过复制基于文件的数据库或通过清空/填充基于服务的数据库)。每个测试也应该尝试撤销其更改(删除文件或空数据库),但不要假设其他测试已成功完成。