12

我们正在使用 VS2012 和 TFS2012 并为我们的代码编写单元测试。我们想要报告代码覆盖率,并在我们的单元测试中使用 .config 文件来测试 appsettings,还有一些其他的日志设置、MS Enterprise 库设置等。


App.config 在新的测试框架中不起作用

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

我们遇到了混合模式 dll 的问题,并找到了解决方法:添加

<startup useLegacyV2RuntimeActivationPolicy="true"> 

到 app.config。但这对我们的单元测试项目不起作用。因为配置文件不再存在。上网搜了一下,找到了解决办法

' Visual Studio .Net 4.5 测试项目中 .Net 2.0 混合模式程序集的问题'

这意味着在程序文件目录中编辑 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 文件配置单元测试”中所述,也根本不起作用。

(真的不是很好)解决方案是添加 dll 作为参考,然后实例化一个类,然后什么都不做。这种方式需要 dll 否则它不会构建,因此 dll 将自己部署到正确的目录。


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

4

1 回答 1

2

a) App.config 在新的测试框架中不起作用

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

b) 不要使用 .testSettings 文件

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

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

  • 复制测试初始化​​所需的文件您可以通过 .testsettings 文件执行此操作,也可以执行构建后文件复制任务。这样做非常简单,对其他任何事情都没有影响。使用“复制到输出目录 = 始终复制”确实有效。请使用示例解决方案进行尝试,看看您是否可以缩小范围,了解为什么这不适用于您的设置。
于 2012-10-25T04:36:37.517 回答