我正在构建模块化WPF应用程序。每个屏幕都是一个高度独立和孤立的单元。唯一共享的东西 - shell和一个带有可重用服务的外观接口的公共库(消息总线,持久性,窗口管理等)。
由于模块松散耦合,因此在单个模块更改时重新测试所有内容是没有意义的。我想只测试改变了什么。如果公共库发生了变化 - 应该重新测试所有内容。
从源代码控制diff中,您可以轻松获取已更改的文件列表,从而解决受影响的项目(csproj文件包含要编译的所有文件)。您还可以从csproj文件(谁使用它,谁受影响)解析项目依赖项。所有这些信息应足以说明实际需要测试的内容。所以问题听起来可以解决。
有没有人使用TeamCity完成此操作?有什么建议?我看到有一个Java人员的解决方案: http://blog.jetbrains.com/teamcity/2012/03/incremental-testing-with-teamcity/
.net领域怎么样?
答案 0 :(得分:8)
您必须创建构建配置并生成人工制品并运行测试。
例如,您有项目Library
,Library.Tests
,Portable
,Poratble.Tests
,App
和App.Tests
。
您必须创建编译Library build
和Library
项目的构建配置(例如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
并拥有自己的测试套件。
同样,您应该创建构建配置,该构建配置将编译项目Portable
和Portable.Tests
并生成称为例如的人工制品。 portabletests.zip
然后,您再次创建另一个构建配置,以便像以前一样运行此测试。只有这次你应该在Build library
和Run library tests
配置上添加另一个快照依赖项。通过这种额外的快照依赖关系,您将实现仅在库构建和testrun正常时编译和运行代码。
同样适用于App
和App.Tests
。
所以......当库中发生更改时,将重建整个集并运行所有测试(Library.Tests
,Portable.Tests
,App
,App.Tests
)。
在Portable
代码中发生更改时,会触发Bulid portables
并运行Portable.Tests
并重新编译App
+ App.Tests
并运行App.Tests
。< / p>
在此链接上,您可以了解有关teamcity中的快照和人工制品依赖关系的更多信息 http://confluence.jetbrains.com/display/TCD8/Configuring+Dependencies