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

Visual Studio Unit Test - Weird behaviour

以前有没有人见过这种非常奇怪的行为?

  • 我有70个单元测试的解决方案。所有这些都通过了我的开发机器。
  • 每当我提交更改时,我们的持续集成过程就会启动,并且构建框最终将运行相同的70个单元测试。
  • 在构建框中只有一个测试始终失败。
  • 错误仅出现在一行中,该行仅从我们的单元测试数据库中获得一条记录。 (我知道依靠数据进行单元测试很糟糕,但是请不要专注于此,因为它现在已经不相关了)
  • 最奇怪的是,当我登录到构建框时,打开相同的Visual Studio解决方案并手动启动单元测试。结果:全部通过!
  • 有人遇到过这种奇怪的情况吗?我猜测Cruise Control.NET和MSTest会发生一些奇怪的事情吗?


    您的单元测试运行器肯定会生成一个很好的日志,其中显示了确切的异常消息或错误吗?猜测它是没有意义的,但是"访问被拒绝"类型的错误将是显而易见的候选对象。设置您使用的任何dbase引擎(您也不要忘了提到)来为在构建grunt上运行测试的用户帐户提供对表的访问权限。


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

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


    感谢您的输入,但这与凭据无关。
    我发现在该特定测试之前运行的其他测试使我的单元测试数据库处于不一致状态,因此导致所讨论的测试出错。
    让单元测试依赖数据不是一个好习惯,因此,除非您像我本人一样极端地依赖它,否则这是对每个人的建议:不要依靠数据来进行单元测试!确保已准备好所有好东西,尤其是一个好的IOC /依赖注入器容器,这样您的类就可以松散地耦合在一起,并且可以模拟您可能希望轻松进行单元测试的任何接口!


    如另一个答案中所述,当周围有详细的日志...时,猜测它没有太大的意义。

    但是由于我多次遇到这种情况,所以还是有一个猜测:
    CI服务器用来运行测试的帐户可能在数据库中没有适当的权限。这也将说明为什么手动运行相同的测试(然后使用您的用户帐户)时成功进行测试的原因...

    HTH!
    托马斯