TeamNet对.Net项目的增量测试

时间:2014-08-20 10:30:42

标签: c# .net msbuild nunit teamcity

我正在构建模块化WPF应用程序。每个屏幕都是一个高度独立和孤立的单元。唯一共享的东西 - shell和一个带有可重用服务的外观接口的公共库(消息总线,持久性,窗口管理等)。

由于模块松散耦合,因此在单个模块更改时重新测试所有内容是没有意义的。我想只测试改变了什么。如果公共库发生了变化 - 应该重新测试所有内容。

从源代码控制diff中,您可以轻松获取已更改的文件列表,从而解决受影响的项目(csproj文件包含要编译的所有文件)。您还可以从csproj文件(谁使用它,谁受影响)解析项目依赖项。所有这些信息应足以说明实际需要测试的内容。所以问题听起来可以解决。

有没有人使用TeamCity完成此操作?有什么建议?我看到有一个Java人员的解决方案: http://blog.jetbrains.com/teamcity/2012/03/incremental-testing-with-teamcity/

.net领域怎么样?

1 个答案:

答案 0 :(得分:8)

您必须创建构建配置并生成人工制品并运行测试。

例如,您有项目LibraryLibrary.TestsPortablePoratble.TestsAppApp.Tests

您必须创建编译Library buildLibrary项目的构建配置(例如Library.Test)。这种配置生成artefactes让我们说,例如。 libtests.zip

然后您创建另一个构建配置(例如。Run Library Tests并设置快照和artefacts依赖于先前创建的Library build配置。在此测试运行配置中,您已解压缩libtests.zip文件(从artefacts依赖收集)并创建一个构建步骤(例如NUnit runner)来运行这些测试。

小心:您只想在库中发生更改时运行测试,因此在"版本控制设置"检查Show changes from snapshot dependencies并创建将Trigger on changes in snapshot dependencies(也是一个复选框)的新VCS触发器。

然后,假设Portable依赖Library并拥有自己的测试套件。

同样,您应该创建构建配置,该构建配置将编译项目PortablePortable.Tests并生成称为例如的人工制品。 portabletests.zip

然后,您再次创建另一个构建配置,以便像以前一样运行此测试。只有这次你应该在Build libraryRun library tests配置上添加另一个快照依赖项。通过这种额外的快照依赖关系,您将实现仅在库构建和testrun正常时编译和运行代码。

同样适用于AppApp.Tests

所以......当库中发生更改时,将重建整个集并运行所有测试(Library.TestsPortable.TestsAppApp.Tests)。 在Portable代码中发生更改时,会触发Bulid portables并运行Portable.Tests并重新编译App + App.Tests并运行App.Tests。< / p>

在此链接上,您可以了解有关teamcity中的快照和人工制品依赖关系的更多信息 http://confluence.jetbrains.com/display/TCD8/Configuring+Dependencies