【发布时间】:2011-08-09 04:55:28
【问题描述】:
嗯,在我们的主要项目中,JetBrains TeamCity 引发的单元测试遇到了一个奇怪的问题,其中少数库项目的测试经常失败。显然,它没有读取配置文件(来自 app.config 并很好地存储在 project -> bin -> debug -> projectName.dll.config 中)。
我们将不胜感激有关可能是真正问题的提示或提示。
【问题讨论】:
嗯,在我们的主要项目中,JetBrains TeamCity 引发的单元测试遇到了一个奇怪的问题,其中少数库项目的测试经常失败。显然,它没有读取配置文件(来自 app.config 并很好地存储在 project -> bin -> debug -> projectName.dll.config 中)。
我们将不胜感激有关可能是真正问题的提示或提示。
【问题讨论】:
我也遇到了同样的问题,并且浪费了几个小时来弄清楚问题所在。
在我们的例子中,NUnit 插件配置为从以下位置运行测试:
**\*Tests.dll
虽然这听起来没问题,但事实证明,这种模式不仅会匹配 bin\Debug 文件夹中的 MyTests.dll,还会匹配 obj\Debug\MyTests.dll。 obj文件夹内部用于编译,不包含配置文件。
最后的解决方案是将插件配置更改为
**\bin\Debug\*Tests.dll
实际上,我们使用系统变量进行构建配置,因此我们没有硬编码“调试”。当工作区也用于调试/发布构建并且您没有指定完全清理时,使用 bin* 也可能很危险。
你可能想知道为什么我没有意识到测试计数不匹配(实际上它加倍了,因为它们一次从 bin 运行,一次从 obj 运行),但这是典型的:虽然一切都是绿色的,但你并不关心计数。当我们根据配置引入第一个测试时,我们只有一个失败(因为 bin 中的那个通过了),所以重复并不突出。
【讨论】:
除了Gaspar Nagy's accepted answer,检查您的项目是否有多个测试dll,并且其中一个引用了另一个。
这会导致引用的 dll 运行两次,并且另一个 dll 文件夹中的副本没有正确的 app.config 条目。正确的解决方法是从其他测试项目中删除所有引用。
【讨论】:
TeamCity (v6.5.4) 有自己的 NUnit 测试运行程序,它与 NUnit GUI 测试运行程序 (2.5.10) 之间似乎存在不一致。 NUnit GUI 测试运行程序遵循期望配置文件名称为 .config 格式的长期约定。您可以通过查看 Project -> Edit... 在 NUnit 中看到这一点
另一方面,TeamCity 正在寻找 app.config。
您的选择是:
【讨论】:
我也有类似的烦恼
This 可能会有所帮助;此外,我们遇到了仍然无法正常工作的问题——我们最终将相关的配置部分复制到了最高级别的配置文件中。 (即,如果它是一个网络应用程序,请将其复制到 Web.Config 中)- 相当笨拙,但我们在这个问题上浪费了几天时间
【讨论】:
我最近了解到 app.config 文件不是为类库读取的......也许这个链接可以帮助:)
【讨论】:
如果您的“单元”测试需要配置文件,那么您做错了。正确的单元测试永远不需要配置或访问数据库、文件系统等。你应该改变你的测试策略。
开始的好点是使用[Category("Integration")] 注释标记需要配置的测试,并将 Teamcity 测试运行器设置为忽略此类别。然后你应该专注于重构这些测试。
【讨论】: