22

我目前正在尝试从 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。那只是不是非常便携。

4

9 回答 9

15

来自 Craig Stuntz 在链接文本的评论中

如何使用 MSTest 做到这一点。

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

  2. 点击添加,新建项目

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

  4. 现在选择测试运行配置项并将其添加到您的项目中

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

  6. 单击部署项

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

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

于 2010-08-06T14:09:15.790 回答
6

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

于 2009-01-29T20:09:11.810 回答
2

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。也许这会奏效。

于 2009-01-30T04:41:14.447 回答
2

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

于 2015-10-01T10:43:21.020 回答
1

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

于 2009-01-30T01:28:49.887 回答
0

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

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

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

于 2009-01-29T23:42:16.890 回答
0

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

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

于 2009-02-14T06:48:32.787 回答
0

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

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

这对我有用。

于 2016-08-22T09:18:17.720 回答
-2

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

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

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

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

于 2009-01-30T04:55:38.177 回答