TeamCity 对 .Net 项目进行增量测试

本文关键字:测试 Net 项目 TeamCity | 更新日期: 2023-09-27 18:18:45

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

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

从源代码管理差异中,您可以轻松获取更改的文件列表,从而解决受影响的项目(csproj 文件列出了所有要编译的文件(。还可以从 csproj 文件解析项目依赖项(谁在使用它,谁受到影响(。所有这些信息应该足以说明实际需要测试的内容。所以这个问题听起来是可以解决的。

有没有人在TeamCity上做过这件事?有什么建议吗?我看到有一个针对Java人员的解决方案:http://blog.jetbrains.com/teamcity/2012/03/incremental-testing-with-teamcity/

那么 .net 领域呢?

TeamCity 对 .Net 项目进行增量测试

您必须创建生成配置并生成工件并运行测试。

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

您必须创建构建配置(例如。 Library build (,用于编译LibraryLibrary.Test项目。这种配置会生成人工制品,例如。 libtests.zip .

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

请注意:您希望仅在库中发生更改时才运行测试,因此在"版本控制设置"下检查Show changes from snapshot dependencies并创建新的 VCS 触发器,该触发器将Trigger on changes in snapshot dependencies(也是一个复选框(。

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

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

再次创建另一个构建配置来运行此测试,与之前相同。 只有这一次,您应该在Build libraryRun library tests配置上添加另一个快照依赖项。有了这个额外的快照依赖项,你将实现只有在库构建和测试运行正常时编译和运行代码。

AppApp.Tests也是如此。

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

在此链接中,您可以了解有关团队城市中的快照和工件依赖项的更多信息http://confluence.jetbrains.com/display/TCD8/Configuring+Dependencies