Nunit 测试项目未在TeamCity中读取app.config->;努尼特期

Nunit 测试项目未在TeamCity中读取app.config->;努尼特期,nunit,teamcity,Nunit,Teamcity,我们面临着一个奇怪的问题,JetBrains TeamCity在我们的主项目中引入了单元测试,其中来自少数库项目的测试经常失败。显然,它没有读取配置文件(来自app.config,并很好地存储在project->bin->debug->projectName.dll.config中) 关于什么可能是真正问题的提示或提示将不胜感激 我最近了解到,类库不会读取app.config文件。。。也许这个链接可以帮助:) 如果您的“单元”测试需要一个配置文件,那么您就错了。正确的单元测试不需要配置或访问数据

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


关于什么可能是真正问题的提示或提示将不胜感激

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


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

一个好的起点是使用
[Category(“Integration”)]
注释标记需要配置的测试,并将Teamcity测试运行程序设置为忽略此类别。然后,您应该专注于重构这些测试

我也有类似的不幸


可能有帮助;此外,我们还遇到了一些问题,这些问题仍然无法解决——我们最终将相关的配置部分复制到了最高级别的配置文件中。(例如,如果它是一个web应用程序,请将其复制到web.Config中)-相当麻烦,但我们在这个问题上浪费了几天时间

我也遇到了同样的问题,并浪费了几个小时来找出问题所在

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

**\*Tests.dll
虽然这听起来不错,但事实证明,此模式不仅与bin\Debug文件夹中的MyTests.dll匹配,而且还与obj\Debug\MyTests.dll匹配。obj文件夹在内部用于编译,不包含配置文件

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

**\bin\Debug\*Tests.dll
实际上,我们在构建配置中使用了一个系统变量,因此我们没有硬编码“调试”。如果工作区也用于调试/发布版本,并且您没有指定完整的清理,那么使用bin*可能也很危险

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

TeamCity(v6.5.4)有自己的NUnit测试运行程序,它和NUnit GUI测试运行程序(2.5.10)之间似乎存在不一致。NUnit GUI测试运行程序遵循长期以来的约定,即期望配置文件名的格式为.config。您可以在NUnit中查看项目->编辑

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

您的选择是:

  • 将NUnit GUI设置为指向app.config并包含结果 源代码管理中的nunit项目
  • 同时拥有app.config和.config-同步两者 手工的
  • 在生成过程中添加一个步骤,将.config复制到 app.config(反之亦然)
  • 此外,检查项目是否有多个测试DLL,其中一个是否引用了另一个


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

    我们已经为我们的测试项目(从2009年开始运行)使用了单独的app.config和user.config(针对单个开发人员)。那个讨论并不能解释为什么它不能被使用,这是不真实的。如果您的测试项目有自己的App.Config文件,这些设置将(而且应该)可以访问。谢谢您的提示,但我的问题完全在另一行。这会问为什么它没有读取配置文件。是否有一条硬性规定,您不能将App.Config用于您的测试项目?(至于集成测试的假设,在该项目下,我们很少使用配置文件中的一些键进行集成测试).作为参考,请检查我的Marc G的答案。对于这种情况,我会说不,测试项目没有这样的规则。但我同意,在理想情况下,单元测试不应该需要它。然而,测试项目可以不仅仅是单元测试,可以是集成或验收测试,在这些情况下,我认为它是完整的使用配置文件非常有效。感谢Dean的回复。只是有点困惑;我们的app.config实际上在output dir中得到了很好的复制,但根本没有被读取。顺便说一句,我们正在NUnit上运行。如果我误解了你的答案,请告诉我。谢谢这真是一个好发现,所以即使是这样,我们也必须给它加1去年它帮助了我。除此之外,我们的项目有多个测试dll,其中一个正在引用另一个。这导致被引用的dll运行了两次,而另一个dll文件夹中的副本没有正确的app.config条目。正确的修复方法是从另一个测试项目中删除所有引用。@DMactheDestroyer-你应该把你的评论作为一个答案。起初我没有注意到,结果它成为了我需要的解决方案。这是我的问题!!!非常感谢!你回答了我的问题。