Visual Studio单元测试 - 奇怪的行为

时间:2010-10-06 03:26:10

标签: visual-studio unit-testing continuous-integration cruisecontrol.net mstest

之前有没有人见过这种奇怪的行为?

  1. 我有70个单元测试的解决方案。所有这些都传递给我的开发机器。
  2. 每当我提交更改时,我们的持续集成过程就会启动,构建框最终将运行相同的70个单元测试。
  3. 构建框中只有一个测试始终失败。
  4. 错误在一行中,只从我们的单元测试数据库中获取记录。 (我知道单元测试依赖于数据很糟糕,但请不要关注这一点,因为它现在不相关)
  5. 最奇怪的是当我登录构建盒时,打开相同的visual studio解决方案并手动启动单元测试。结果:全部通过!
  6. 有没有人遇到这种奇怪的情况?我猜猜Cruise Control.NET和MSTest还有一些奇怪的事情发生了吗?

4 个答案:

答案 0 :(得分:1)

当然,您的单元测试运行器会生成一个显示完全异常消息或错误的良好日志?猜测它有点毫无意义,但是“拒绝访问”类型的错误将是一个明显的候选人。设置你使用的任何dbase引擎(你也忘了提到它)给用户帐户运行测试对build grunt访问表。

答案 1 :(得分:0)

正如另一个答案所说,当有详细的日志时,猜测它并没有多大意义......

但是因为我曾多次遇到过这种情况,所以无论如何都是猜测: CI服务器用于运行测试的帐户可能在数据库中没有适当的权限。这也可以解释为什么手动运行(然后使用您的用户帐户)同样的测试成功...

HTH! 托马斯

答案 2 :(得分:0)

感谢您的输入,但它根本与证书无关。 我发现在该特定的测试之前运行的其他测试使我的单元测试数据库处于不一致状态,因此导致测试错误。 让你的单元测试依赖于数据并不是一个好习惯,所以除非你像我一样非常受限于此,否则这是对每个人的推荐:不要依赖数据做你的单元测试!!!!确保你拥有所有好的东西,特别是一个好的IOC /依赖注入器容器,这样你的类就可以松散耦合了,你可以模拟任何你想要轻松进行单元测试的界面!

答案 3 :(得分:0)

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

在您的情况下,您应该让每个测试初始化​​准备它使用的数据库(通过复制基于文件的数据库或清空/填充基于服务的数据库)。每个测试还应尝试撤消其更改(删除文件或空DB),但不要假设其他测试已成功完成。