VS2012& TFS2012单元测试主要问题

时间:2012-10-24 12:05:47

标签: unit-testing visual-studio-2012 tfs2012

我们正在使用VS2012和TFS2012并为我们的代码编写单元测试。我们希望报告代码覆盖率,并在测试应用程序的单元测试中使用.config文件,以及日志记录,MS企业库设置等的其他一些设置。


App.config无法在新测试框架中使用

MS的新测试框架应该很棒,但对我来说它根本不是那么好。 当新框架不再使用配置文件时,我想如何在配置文件中设置一些基本配置?

我们遇到了混合模式dll的问题,并找到了修复:添加

<startup useLegacyV2RuntimeActivationPolicy="true"> 

到app.config。但这对我们的单元测试项目不起作用。因为配置文件不再存在了。在互联网上搜索了一个解决方案

'Problems with .Net 2.0 Mixed Mode Assemblies inside Visual Studio .Net 4.5 Test Projects'

这意味着在程序文件目录中编辑Visual Studio 11本身的文件,我觉得这不是一个很好的解决方案....

一些基本的appset怎么样?我怎么设置这个?


请勿使用.testSettings文件

MS也不建议使用旧的.testsettings文件,因为使用了旧的测试框架。如果我使用.testsettings文件,我无法在我的tfs2012构建服务上设置代码覆盖率。

另一个问题是我们的代码需要一个dll(system.data.sqlite.dll),但只有在运行时单元测试代码才需要这个dll。因此不需要参考。我们使用testsettings文件中的Deployment选项卡修复了此问题。但是在新框架中,您不应该使用testsettings文件。如果需要文件,则具有[deploymentitem]属性。但deploymentitem属性只能用于[testmethial]或[assemblyinitialize]方法上的[testmethod]。但是我们的代码需要[testinitialize]方法中的dll。所以没有办法让dll到位。

在[assemblyinitialize](或testinitialize)方法中使用File.Copy复制它是行不通的。

将dll作为文件添加到项目中,并将“复制到输出目录”设置为“始终复制”,如“Configuring Unit Tests by using a .runsettings File”中所述,也不起作用。

这个(真的不是很好的)解决方案是添加dll作为引用,然后实例化一个类,并且不要使用它。这样就需要dll,否则它就不会构建,因此dll会将自己部署到正确的目录。


如何解决我的问题??? - 我想在单元测试中使用配置文件。 - 我想在'assemblyinitialise'和/或'classinitialize'方法中部署一些neede文件。 - 我希望在我的TFS2012夜间构建启用代码覆盖率。

1 个答案:

答案 0 :(得分:2)

a)App.config无法在新的测试框架中工作

这应该仍然有用。我认为在这种情况下缺少的是这个.config文件没有被你的测试dll复制。您能否将此设置为部署项目并重试?

b)不要使用.testSettings文件

  • .testsettings和代码覆盖率。 在VS 2012版本中仍然支持使用.testsettings文件设置代码覆盖率。您只需选择mstest 2010测试运行器并在构建定义中指定.testsettings文件

如果除了.testsettings文件中的代码覆盖率设置之外没有任何其他内容,那么您可以轻松迁移到2012测试运行器并在下拉项中选择“启用代码覆盖率”

  • 复制test initalize所需的文件 您可以通过.testsettings文件执行此操作,也可以执行构建后文件复制任务。这样做非常简单,对其他任何事情都没有影响。使用“复制到输出目录=始终复制”确实有效。请尝试使用示例解决方案,看看您是否可以缩小为什么这对您的设置无效。