有谁用过吗 哈德逊 作为 C++ 项目的持续集成服务器,使用 单元测试++ 作为测试库?

你具体是怎么设置的?

我知道之前有几个关于持续集成的问题,但我希望这个问题的范围能缩小一些。

编辑:我会澄清一下我在寻找什么。当单元测试失败时,我已经将构建设置为失败。我正在寻找 Hudson 的 JUnit 支持之类的东西。UnitTest++ 可以创建 XML 报告(请参见 这里)。那么,也许如果有人知道如何将这些报告转换为 JUnit 兼容,Hudson 就会知道如何消化它?

有帮助吗?

解决方案

我们正在我的工作场所积极这样做。

目前,我们使用自由式软件项目来:

  • 每 15 分钟检查一次我们的 Subversion 存储库更新
  • 调用 Windows 批处理文件来清理并构建解决方案文件
    • 项目文件构建并运行单元测试作为构建后事件
    • 单元测试失败由测试返回 main(), ,因此被视为构建错误

我还测试了使用 UnitTest++ 中包含的 XmlTestReporter 来生成输出文件的配置。这 xUnit插件 尽管我必须更改版本 0.1.3 中附带的 XSL 文件才能获取测试历史记录中记录的持续时间,但本机支持此输出以及您可以转换的任何其他输出。

关于我们的集成,我们希望改进很多方面;构建日志又长又难解析,没有着色或突出显示等,但到目前为止它仍然对我们有益。

其他提示

我检查了 xUnit 插件,正如Patrick Johnmeyer在接受了答案。为了完整性,这里是驱动程序代码:

#include <fstream>
#include "UnitTest++.h"
#include "XmlTestReporter.h"

int main( int argc, char *argc[] ) {
    std::ofstream f("file.xml");
    UnitTest::XmlTestReporter reporter(f);
    return UnitTest::RunAllTests(reporter, UnitTest::Test::GetTestList(), NULL, 0);
}

在Hudson配置中,选中“发布测试工具结果报告”。并将其指向&quot; file.xml&quot;

Hudson现在有一个 CppUnit插件可以做的伎俩

在我开始使用Hudson之前很久,我参与了一个C ++项目,我们使用了cpp-unit-lite和CruiseControl

我们改变了Cpp-unit-lite以生成类似XML报告文件的JUnit,CruiseControl选择了XML报告文件。

您可以对UnitTest ++执行相同操作,Hudson将拾取报告文件。

然而,这似乎很多工作。看看Hudson的情节插件。您可以让脚本从UnitTest ++输出中提取失败/通过测试的数量,并使用plot插件绘制每个构建的通过/失败测试的简单图表。

不如内置单元测试报告那么好,但你可以快速工作。

我将 hudson 与 CppUnit 和 xml 输出一起使用。xml 由 xslt 转换为 JUnit 输出,例如。CppUnit 站点提供了一个 xslt,可将 CppUnit 输出转换为 JUnit 输出。我对它进行了一些修改,以获得更多详细信息,例如:

  • 命名空间作为包
  • 执行时间处理时间

您可以转换 xml 输出以获得以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<testsuite>
   <testcase name="my test name"
             classname="Package1.Package2.TestClass"
             time="0.25">
      <error type="error"/>
   </testcase>
   ....
</testsuite>

如果成功:只需删除子标签

问候

我们一直在办公室使用类似的方法,除了使用cxxtest而不是UnitTest ++,现在我们正在迁移到google的优秀(imho)gtest框架。

使用cxxtest,我们做了类似于Patrick J.建议的事情,这基本上是添加一个构建步骤,它将通过ant运行测试套件程序,并导致构建失败,如果任何测试失败。这种方法的缺点是当构建因测试结果而失败时,你必须通过控制台输出来寻找出错的地方。如果您的测试框架可以输出与junit兼容的XML,那么您也会丢失hudson可以生成的漂亮图表。

切换到gtest的一个激励因素是它确实生成了junit XML,因此从理论上讲,hudson可以解析测试结果并以更合理的方式发布它们。无论如何,它看起来不像UnitTest ++生成这样的东西(如果我错了请纠正我),所以这可能是一个没有实际意义的点,但至少将它集成到你的构建过程中将确保测试在生成。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top