c# - 如何在 Teamcity 上使用 ApprovalTests?

标签 c# .net continuous-integration teamcity approval-tests

我正在使用 Approval Tests .在我的开发机器上,我对 DiffReporter 很满意,它在我的测试结果与批准的结果不同时启动 TortoiseDiff:

    [UseReporter(typeof (DiffReporter))]
    public class MyApprovalTests
    { ... }

但是,当在 Teamcity 上运行相同的测试并且结果不同时,测试失败并出现以下错误:

System.Exception : Unable to launch: tortoisemerge.exe with arguments ...
Error Message: The system cannot find the file specified
---- System.ComponentModel.Win32Exception : The system cannot find the file 
                                                                 specified

显然它找不到 tortoisemerge.exe,这很好,因为它没有安装在构建代理上。但是如果它被安装了呢?然后对于每次失败,另一个 tortoisemerge.exe 实例将启动并且没有人会关闭它。最终大量的 tortoisemerge.exe 实例会杀死我们的服务器 :)

所以问题是——应该如何修饰测试以在本地机器上运行 Tortoise Diff 并仅在构建服务器上报告错误?我知道 #IF DEBUG [UseReporter(typeof (DiffReporter))] 但如果可能,我更喜欢其他解决方案。

最佳答案

Reporters 和 CI 的问题有几个解决方案。我将列出所有这些,然后指出一个更好的解决方案,该解决方案尚未完全启用。

  1. 使用 AppConfigReporter。这允许您在 AppConfig 中设置 reporter,并且您可以使用 QuietReporter for CI。 这里有一个视频,还有很多其他的记者。 AppConfigReporter 出现在 6:00。 这具有单独配置的优点,您可以在程序集级别进行装饰,但缺点是如果您在类/方法级别进行覆盖,您仍然会遇到问题。

  2. 创建您自己的 (2) 名记者。值得注意的是,如果你使用记者,它会被调用,不管它是否在环境中工作。 IEnvironmentAwareReporter 允许复合记者,但不会阻止直接调用记者。 您很可能需要 2 个记者,其中一个什么都不做(就像一个安静的记者),但只在您的 CI 服务器上工作,或者在被 TeamCity 调用时工作。将其称为 TeamCity Reporter。还有一个,它是一个 multiReporter,它在工作时调用 teamCity,否则遵从 。

  3. 使用 FrontLoadedReporter(还没准备好)。这就是 ApprovalTests 目前使用 NCrunch 的方式。它在 UseReporter 属性中加载的任何内容之前执行上述方法。我一直想添加一个程序集级别的属性来配置它,但还没有(抱歉)我会尽快添加它。

希望这对您有所帮助。 卢埃林

关于c# - 如何在 Teamcity 上使用 ApprovalTests?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9939209/

相关文章:

Java、Gradle、CI 和指定内存使用限制

github - Github 的正确 VCS 用户名设置是什么,以便 "My Changes"正常工作?

azure-devops - Azure 开发运营 : Populating secure file references with job matrix variables

c# - 如何在不使用 sqlite 原始语句/conn.execute() 的情况下为 Sqlite.net 设置默认值

C# Dictionary<T,K> 单写多读线程安全

.net - 在 Raspberry Pi 上调试 .NET 应用程序 - dotnet 已退出,代码为 0

c# - 如何在 Windows 服务中使用 Quartz.Net 安排任务?

c# - 通过 C# 处理文件的最佳实践

c# - MONO 的多门户 CMS

.net - Azure Web/辅助角色可以支持 .NET Framework 4.5.2 吗?