我目前正在尝试从NCover运行MSTest.exe,但我相信这个问题通常适用于从命令行运行MSTest.exe .
如果我有“/ noisolation”参数,那么MSTest.exe似乎找到并按预期使用app.config . 没有它,NCover不会捕获任何覆盖信息 . 从我迄今为止的研究来看,似乎NCover需要/不分离 . 所以问题是如何在传递参数时让我的* .config文件工作 .
我的NCover设置是:
Application to Profile
C:\ Program Files(x86)\ Microsoft Visual Studio 9.0 \ Common7 \ IDE \ MSTest.exe
Working Folder
C:\ Documents and Settings \ MyProfile \ My Documents \ Visual Studio 2008 \ Projects \ XYZ \ XYZ.CoreTest \ bin \ Debug
Application arguments
/ 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 回答
来自Craig Stuntz的评论link text
如何使用MSTest执行此操作 .
在“解决方案资源管理器”中,右键单击“解决方案”(而不是“项目”) .
单击“添加”,“新建项”
在“类别”中,选择“测试运行配置”
现在选择“测试运行配置”项并将其添加到项目中
在解决方案资源管理器中,双击刚刚创建的“测试运行配置”
单击“部署”项
将配置文件添加为已部署的文件(或部署包含它的整个文件夹,如果适用)
我花了一点时间才弄明白,但我处于类似情况,它对我有用 .
在visual studio中,将App.config文件标记为属性为CopyAlways . (右键单击文件,选择属性以进入属性面板)
在NCover修正案下的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 . 也许这会奏效 .
我使用MSTestRunner Plugin在Jenkins构建中遇到了同样的问题 . 从配置页面检查Omit NoIsolation解决了问题 .
有's a technique where you can combine the contents of config files it'的详细here . 您可以将一个固定文件包含在MSTest.exe.Config中,然后复制您的应用程序_丑陋,但是对于每个不同的可能性都比黑客攻击MSTest.exe.Config更便携 .
我以前从未使用NoIsolation,但如果我正确理解它,它会在MSTest类中运行所有测试代码 . 既然如此,它确实应该读取MSTest的App配置 . 如果你坚持使用noisolation,我想你必须将你的App.config合并到MSTest.exe.config中 . 当然,这是一个黑客 .
完全避免完全隔离可能会更好 . 如果是由于错误,请尽可能修复错误 . 如果无法重新组织(主要重构)您的应用,请解决此错误 . 我不确定有一个优雅的选择 .
我发现“我认为我们需要找到这个问题的根本原因,以避免noisolation切换 . 您可能需要修改您的应用程序 . 是否有可能创建一个简单的解决方案来重现相同的问题?”在this URL .
要清除混淆:不使用/ noisolation =如果找到SameNameAsYourDll.dll.config文件,它将自动部署测试dll,并将用于运行测试的app域的app配置那个集会
using / noisolation =我们在测试,你,主机进程和其他一切之间做的所有隔离都在窗外 . 我们可能仍然会做一些隔离,但是您没有获得app域的额外好处,这对您的测试dll是唯一的 . 因此,你的配置将无济于事 .
尝试将其名称从
app.config
更改为projectname.extension.**config**
例如,如果您有一个名为
proj1
的单元测试项目并使用其dll
,则将app.config
重命名为proj1.dll.config
这对我有用 .
好吧,我冒的风险是我的帖子将转变为一个单元测试flamewar,但我认为问题是你的测试,甚至可能是你的代码 . 你应该重构 .
单元测试应该是原子的 . 单个测试应该没有外部依赖项和配置文件 is 这样的依赖项 . 没有测试应该依赖配置文件 .
如果您正在测试使用配置文件中的信息的方法,请重构代码,以便在方法之外读取配置的信息并在调用方法之前传递给方法或设置为属性 . 这样,您的测试可以将值传递给方法,也可以在测试设置期间设置属性 .
如果您需要app.config来获取数据库连接字符串,那么您就是自己的 . 众所周知,DAL难以进行单元测试 . 如果是Web服务连接字符串,请不要使用它 - 模拟接口 .