MSTest.exe找不到app.config

时间:2009-01-27 19:15:12

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

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

如果我有“/ noisolation”参数,则MSTest.exe似乎找到并按预期使用app.config。没有它,NCover不会捕获任何覆盖信息。从我迄今为止的研究来看,似乎NCover需要/不分离。所以问题是如何在传递参数时让我的* .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。这不是非常便携。

9 个答案:

答案 0 :(得分:12)

来自Craig Stuntz的评论link text

如何使用MSTest执行此操作。

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

  2. 点击添加,新项目

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

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

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

  6. 单击“部署”项

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

  8. 我花了一点时间才弄明白,但我处于类似情况,它对我有用。

答案 1 :(得分:5)

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

答案 2 :(得分:2)

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

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

如果确实已修复,则将NCover升级到2.1.0。也许那会奏效。

答案 3 :(得分:2)

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

答案 4 :(得分:1)

有一种技术可以将详细配置文件的内容组合在一起here。您可以将固定文件包含在MSTest.exe.Config中,然后将应用程序的app.config复制到该固定文件位置。它很难看,但比每次不同的可能性黑客攻击MSTest.exe.Config更便携。

答案 5 :(得分:0)

我以前从未使用NoIsolation,但如果我正确理解它,它会在MSTest类中运行所有测试代码。既然如此,它确实应该读取MSTest的App配置。如果你坚持使用noisolation,我想你必须将你的App.config合并到MSTest.exe.config中。当然,这是一个黑客攻击。

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

我发现“我认为我们需要找到此问题的根本原因,以避免noisolation切换。您可能需要修改您的应用程序。是否有可能创建一个简单的解决方案来重现相同的问题?“在this URL

答案 6 :(得分:0)

清除困惑: 不使用/ noisolation =如果找到SameNameAsYourDll.dll.config文件,它将自动部署测试dll,并将用于运行该程序集中的测试的app域的app配置

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

答案 7 :(得分:0)

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

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

这对我有用。

答案 8 :(得分:-2)

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

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

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

如果您需要app.config用于数据库连接字符串,那么您就是自己的。众所周知,DAL难以进行单元测试。如果是Web服务连接字符串,请不要使用它 - 模拟接口。