我们使用 VS2012 和 TFS2012 并为我们的代码编写单元测试。我们想要报告代码覆盖率,并在单元测试中使用 .config 文件来测试应用程序设置,以及一些其他日志记录设置、MS Enterprise 库设置等。
App.config 在新的测试框架中不起作用
MS的新测试框架应该很棒,但对我来说根本不是那么好。
当新框架不再使用配置文件时,我该如何在配置文件中设置一些基本配置?
我们遇到了混合模式 dll 的问题,并找到了修复方法:添加
<startup useLegacyV2RuntimeActivationPolicy="true">
到应用程序配置。但这对于我们的单元测试项目不起作用。因为配置文件已经不存在了。网上搜索了一下,找到了解决办法
'Visual Studio .Net 4.5 测试项目中的 .Net 2.0 混合模式程序集存在问题 http://www.diaryofaninja.com/blog/2012/09/13/net-20-mixed-mode-assemblies-in-visual-studio-net-45-test-projects#.UFFl43wdOYw.dotnetkicks'
这意味着在程序文件目录中编辑 Visual Studio 11 本身的文件,我认为这不是一个很好的解决方案......
一些基本的应用程序设置怎么样?我该如何设置这个?
不要使用 .testSettings 文件
MS 也不建议使用旧的 .testsettings 文件,因为这样会使用旧的测试框架。如果我使用 .testsettings 文件,我无法在 tfs2012 构建服务上设置代码覆盖率。
另一个问题是我们的代码需要 dll (system.data.sqlite.dll),但只有在运行时单元测试代码才需要这个 dll。所以不需要参考。我们通过使用 testsettings 文件上的“部署”选项卡修复了此问题。但在新框架中,您不应该使用 testsettings 文件。如果您需要文件,您可以使用 [deploymentitem] 属性。但是,deploymentitem 属性只能在 [testmethod] 上使用,而不能在 [testinitialize] 或 [ assemblyinitialize] 方法上使用。但是我们的代码需要[testinitialize]方法中的dll。所以没有办法让dll就位。
仅仅在[Assemblyinitialize](或testinitialize)方法中用File.Copy复制它是行不通的。
将 dll 作为文件添加到项目中,并将“复制到输出目录”设置为“始终复制”,如“使用 .runsettings 文件配置单元测试 http://msdn.microsoft.com/en-us/library/ee256991.aspx' 也根本不起作用。
对此的(确实不是很好)解决方案是添加 dll 作为引用,然后实例化一个类并且不对其执行任何操作。这样就需要 dll,否则它不会构建,因此 dll 会将自身部署到正确的目录。
如何解决我的问题???- 我想在单元测试中使用配置文件。
- 我想部署“程序集初始化”和/或“类初始化”方法中所需的一些文件。
- 我希望在我的 TFS2012 nightly build 上启用代码覆盖率。