【问题标题】:MSTest.exe not finding app.configMSTest.exe 找不到 app.config
【发布时间】:2010-10-03 20:14:48
【问题描述】:

我目前正在尝试从 NCover 运行 MSTest.exe,但我相信这个问题通常适用于从命令行运行 MSTest.exe。

如果我有“/noisolation”参数,则 MSTest.exe 似乎会按预期找到并使用 app.config。没有它,NCover 不会捕获任何覆盖信息。从我目前的研究来看,似乎 NCover 需要 /noisolation。所以问题是如何让我的 *.config 文件在传递该参数时工作。

我的 NCover 设置是:

应用到个人资料
C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\MSTest.exe

工作文件夹
C:\Documents and Settings\MyProfile\My Documents\Visual Studio 2008\Projects\XYZ\XYZ.CoreTest\bin\Debug

应用程序参数
/noisolation /testcontainer:"C:\Documents and Settings\MyProfile\My Documents\Visual Studio 2008\Projects\XYZ\XYZ.CoreTest\bin\Debug\XYZ.CoreTest.dll"



更新:我添加了一条记录,表明我的配置(毫不奇怪)试图从“C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\MSTest.exe.Config”中读取。

更新 2:如果可能的话,我不想编辑 MSTest.exe.Config。这只是不太便携。

【问题讨论】:

标签: .net visual-studio-2008 app-config mstest


【解决方案1】:

来自 Craig Stuntz 在link text的评论中

如何使用 MSTest 做到这一点。

  1. 在解决方案资源管理器中,右键单击解决方案(不是项目)。

  2. 点击添加,新建项目

  3. 在类别中,选择测试运行配置

  4. 现在选择 Test Run Configuration 项并将其添加到您的项目中

  5. 在解决方案资源管理器中,双击刚刚创建的测试运行配置

  6. 单击部署项

  7. 将您的配置文件添加为已部署文件(或部署包含它的整个文件夹,如果合适)

我花了一点时间才弄清楚,但我的情况类似,它确实对我有用。

【讨论】:

  • 1000 谢谢!这节省了我的一天,几乎没有适应。在 VS2010 中,“测试运行配置”被称为“测试设置”。然后添加配置文件对我有用。
  • 这在 2010 年对我没有任何作用。仍然没有解决这个问题。我无法阻止它从 /IDE/ 目录中读取。
【解决方案2】:

在 Visual Studio 中,将 App.config 文件标记为 CopyAlways 的属性。 (右键文件,选择属性进入属性面板)

【讨论】:

  • 这样做后,(重命名的)app.config 就在我的输出文件夹中,就在程序集旁边……这就是它一直在做的事情。我的应用仍在尝试读取 MSTest.exe.config 而不是 MyAssembly.dll.config。如果我省略 /noisolation 开关,它会读取正确的文件。
  • 刚刚遇到了同样的问题,这对我来说是一种享受。谢谢!
  • 简单的方法! +1
【解决方案3】:

http://docs.ncover.com/ref/2-0/whats-new-in-ncover-2-0/release-notes-for-ncover-2-1-0/ 下 NCover 修复:

在 MSTest 上运行覆盖不再需要“/noisolation”标志。 NCover 正确收集覆盖率

如果确实解决了这个问题,则将 NCover 升级到 2.1.0。也许这会奏效。

【讨论】:

【解决方案4】:

我在使用 MSTestRunner Plugin 构建的 Jenkins 中遇到了同样的问题。从配置页面检查省略 NoIsolation 解决了这个问题。

【讨论】:

    【解决方案5】:

    有一种技术可以组合配置文件的内容,详细信息here。您可以将固定文件 inlcude 行添加到 MSTest.exe.Config,然后将应用的 app.config 复制到该固定文件位置。它很丑陋,但比针对每种不同的可能性破解 MSTest.exe.Config 更便携。

    【讨论】:

      【解决方案6】:

      我以前从未使用过 NoIsolation,但如果我理解正确,它会在 MSTest 类中运行您的所有测试代码。既然如此,它确实并且应该读取 MSTest 的应用程序配置。如果您坚持使用噪声隔离,我认为您必须将 App.config 合并到 MSTest.exe.config 中。当然,这是一个 hack。

      完全避免噪音隔离可能会更好。如果是由于错误,请尽可能修复错误。如果无法重新组织(主要重构)您的应用程序,请解决该错误。我不确定是否有优雅替代方案。

      我发现“我认为我们需要找到这个问题的根本原因以避免噪音隔离开关。您可能需要修改您的应用程序。是否可以创建一个简单的解决方案来重现相同的问题?this URL

      【讨论】:

      • 如果是这种情况,那么我真正的问题可能与如何让 NCover 在没有 /noisolation 的情况下正确使用 MSTest.exe 工作有关。
      • 只是一些想法;抱歉,他们听起来很挑剔。不是故意的。如果您使用的是团队系统,也许您可​​以使用 taht 的代码覆盖率? blogs.vertigosoftware.com/teamsystem/archive/2006/02/06/…
      【解决方案7】:

      为了消除混乱: 不使用 /noisolation = 如果找到 SameNameAsYourDll.dll.config 文件,它将自动与测试 dll 一起部署,并将用于在该程序集中运行测试的应用程序域的应用程序配置

      使用 /noisolation = 我们在测试、您、主机进程和其他所有东西之间所做的所有隔离都在窗外。我们可能仍会进行一些隔离,但您不会获得应用程序域对您的测试 dll 唯一的额外好处。因此,您的 dll 配置将无济于事。

      【讨论】:

        【解决方案8】:

        尝试将其名称从 app.config 更改为 projectname.extension.**config**

        例如,如果您有一个名为 proj1 的单元测试项目,并且您使用它的 dll,请将 app.config 重命名为 proj1.dll.config

        这对我有用。

        【讨论】:

          【解决方案9】:

          好吧,我冒着我的帖子会演变成单元测试的风险,但我认为问题在于您的测试,甚至可能是您的代码。你应该重构。

          单元测试应该是原子的。单个测试应该没有外部依赖,而配置文件就是这样的依赖。没有测试应该依赖于配置文件。

          如果您正在测试使用来自配置文件的信息的方法,请重构您的代码,以便在方法外部读取配置的信息,并在调用方法之前将其传递给方法或设置为属性。这样,您的测试可以将值传递给方法,或者在测试设置期间设置属性。

          如果您需要将 app.config 用于数据库连接字符串,则只能靠您自己。众所周知,DAL 难以进行单元测试。如果它用于 Web 服务连接字符串,请不要使用它——模拟接口。

          【讨论】:

          • 我正在做的可能更好地描述为集成测试,而不是单元测试。在这种特殊情况下,我不得不向现有代码库追溯添加一些测试。
          • 哦,我讨厌那样做!啊,好吧,我坚持我的说法……如果你有机会重构你的代码以使其更可测试,那就去做吧。如果你的手被绑住,你的手就被绑住了。另外,如果可以的话,考虑模拟你的集成,它会在以后为你创造奇迹。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-17
          • 2012-09-20
          • 2018-04-14
          • 2011-02-06
          相关资源
          最近更新 更多