代码之家  ›  专栏  ›  技术社区  ›  Andre Gallo

Visual Studio单元测试-怪异行为

  •  0
  • Andre Gallo  · 技术社区  · 14 年前

    以前有人见过这种奇怪的行为吗?

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

    有人遇到过这种奇怪的情况吗?我猜Cruise Control.net和MSTEST会发生什么奇怪的事情?

    4 回复  |  直到 13 年前
        1
  •  1
  •   Hans Passant    14 年前

    当然,您的单元测试运行程序会生成一个显示 准确的 异常消息还是错误?猜测它有点毫无意义,但“拒绝访问”这种错误显然是一个候选者。设置您使用的任何DBase引擎(您也忘了提一下),以授予在构建grunt访问表时运行测试的用户帐户。

        2
  •  0
  •   Thomas Weller    14 年前

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

    但因为我有过好几次这样的情况,所以还是有个猜测: CI服务器用于运行测试的帐户在数据库中可能没有适当的权限。这也可以解释,当您手动运行同一个测试(然后使用您的用户帐户)时,为什么它会成功…

    嗯! 托马斯

        3
  •  0
  •   Andre Gallo    14 年前

    感谢您的输入,但这与凭证完全无关。 我发现在那个特定的测试之前运行的其他测试将使我的单元测试数据库处于不一致的状态,从而导致所讨论的测试出错。 让您的单元测试依赖于数据并不是一个好的实践,所以除非您像我一样非常依赖于它,否则这是对每个人的一个建议:不要依赖数据来进行单元测试!!!!!确保所有的好东西都在您的位置上,特别是一个好的IOC/依赖注入器容器,这样您的类就可以松散地耦合在一起,并且您可以轻松地模拟任何想要单元测试的接口!

        4
  •  0
  •   Danny Varod    13 年前

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

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