【问题标题】:Test projects not reading app.config in TeamCity -> NUnit phase测试项目未在 TeamCity -> NUnit 阶段读取 app.config
【发布时间】:2011-08-09 04:55:28
【问题描述】:

嗯,在我们的主要项目中,JetBrains TeamCity 引发的单元测试遇到了一个奇怪的问题,其中少数库项目的测试经常失败。显然,它没有读取配置文件(来自 app.config 并很好地存储在 project -> bin -> debug -> projectName.dll.config 中)。

我们将不胜感激有关可能是真正问题的提示或提示。

【问题讨论】:

    标签: nunit teamcity


    【解决方案1】:

    我也遇到了同样的问题,并且浪费了几个小时来弄清楚问题所在。

    在我们的例子中,NUnit 插件配置为从以下位置运行测试:

    **\*Tests.dll
    

    虽然这听起来没问题,但事实证明,这种模式不仅会匹配 bin\Debug 文件夹中的 MyTests.dll,还会匹配 obj\Debug\MyTests.dll。 obj文件夹内部用于编译,不包含配置文件。

    最后的解决方案是将插件配置更改为

    **\bin\Debug\*Tests.dll
    

    实际上,我们使用系统变量进行构建配置,因此我们没有硬编码“调试”。当工作区也用于调试/发布构建并且您没有指定完全清理时,使用 bin* 也可能很危险。

    你可能想知道为什么我没有意识到测试计数不匹配(实际上它加倍了,因为它们一次从 bin 运行,一次从 obj 运行),但这是典型的:虽然一切都是绿色的,但你并不关心计数。当我们根据配置引入第一个测试时,我们只有一个失败(因为 bin 中的那个通过了),所以重复并不突出。

    【讨论】:

    • 这真是一个很好的发现,所以尽管去年它对我有帮助,但还是必须给它一个 +1
    • 除此之外,我们的项目有多个测试 dll,其中一个引用了另一个。这导致引用的 dll 运行两次,而另一个 dll 文件夹中的副本没有正确的 app.config 条目。正确的解决方法是从其他测试项目中删除所有引用。
    • @DMactheDestroyer - 你应该把你的评论作为答案。一开始我没有注意到它,它最终成为了我需要的解决方案。
    【解决方案2】:

    除了Gaspar Nagy's accepted answer,检查您的项目是否有多个测试dll,并且其中一个引用了另一个。

    这会导致引用的 dll 运行两次,并且另一个 dll 文件夹中的副本没有正确的 app.config 条目。正确的解决方法是从其他测试项目中删除所有引用。

    【讨论】:

    • 这是我的问题!!!非常感谢!你回复了我的question
    【解决方案3】:

    TeamCity (v6.5.4) 有自己的 NUnit 测试运行程序,它与 NUnit GUI 测试运行程序 (2.5.10) 之间似乎存在不一致。 NUnit GUI 测试运行程序遵循期望配置文件名称为 .config 格式的长期约定。您可以通过查看 Project -> Edit... 在 NUnit 中看到这一点

    另一方面,TeamCity 正在寻找 app.config。

    您的选择是:

    1. 将 NUnit GUI 设置为指向 app.config 并包含结果 源代码管理中的 nunit 项目。
    2. 同时拥有 app.config 和 .config - 同步两者 手动。
    3. 在构建过程中添加一个步骤以将 .config 复制到 app.config(反之亦然)。

    【讨论】:

      【解决方案4】:

      我也有类似的烦恼

      This 可能会有所帮助;此外,我们遇到了仍然无法正常工作的问题——我们最终将相关的配置部分复制到了最高级别的配置文件中。 (即,如果它是一个网络应用程序,请将其复制到 Web.Config 中)- 相当笨拙,但我们在这个问题上浪费了几天时间

      【讨论】:

      • 感谢院长的回复。只是有点困惑;我们的 app.config 实际上被很好地复制到了输出目录中,但根本没有被读取。顺便说一下,我们正在 NUnit 上运行。顺便说一下,如果我误解了你的答案,请告诉我。谢谢
      【解决方案5】:

      我最近了解到 app.config 文件不是为类库读取的......也许这个链接可以帮助:)

      app.config for a class library

      【讨论】:

      • 我们已经为我们的测试项目(自 2009 年开始运行)使用单独的 app.config 和 user.config(针对个人开发人员)。该讨论并没有解释为什么不能使用它。
      • 这是不真实的。如果您的测试项目有自己的 App.Config 文件,这些设置将(并且应该)可以访问。
      【解决方案6】:

      如果您的“单元”测试需要配置文件,那么您做错了。正确的单元测试永远不需要配置或访问数据库、文件系统等。你应该改变你的测试策略。

      开始的好点是使用[Category("Integration")] 注释标记需要配置的测试,并将 Teamcity 测试运行器设置为忽略此类别。然后你应该专注于重构这些测试。

      【讨论】:

      • 感谢您的提示,但我的问题是在一个完全不同的行上。它问为什么它没有读取配置文件。
      • 是否有一个硬性规定不能将 app.config 用于您的测试项目?(至于集成测试的假设,我们使用的项目下的集成测试很少我们的配置文件中的一些键)。作为参考,请检查我的 Marc G. 的答案,stackoverflow.com/questions/930585/…
      • 我想说不,测试项目没有这样的规则。但我同意在理想情况下您不需要它进行单元测试。但是,测试项目可以不仅仅是单元测试,还可以是集成或验收测试,在这些情况下,我认为使用配置文件是完全有效的。
      猜你喜欢
      • 2011-03-27
      • 2018-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-09
      • 2014-04-19
      • 1970-01-01
      • 2021-07-28
      相关资源
      最近更新 更多