22

有没有人将Hudson用作使用UnitTest++作为测试库的 C++ 项目的持续集成服务器?

你到底是怎么设置的?

我知道之前有几个关于持续集成的问题,但我希望这个问题的范围更窄。

编辑:我会澄清一下我在寻找什么。当单元测试失败时,我已经将构建设置失败。我正在寻找像 Hudson 的 JUnit 支持这样的东西。UnitTest++ 可以创建 XML 报告(参见此处)。所以,也许如果有人知道如何将这些报告翻译成与 JUnit 兼容,Hudson 就会知道如何吃掉它?

4

6 回答 6

12

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

目前,我们使用自由风格的软件项目来:

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

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

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

于 2009-01-05T14:48:15.733 回答
6

正如 Patrick Johnmeyer 在接受的答案中建议的那样,我检查了xUnit插件。为了完整起见,这里是驱动程序代码:

#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 配置中,勾选“Publish testing tools result report”并指向"file.xml"

于 2009-12-16T14:26:11.317 回答
4

Hudson 现在有一个CppUnit 插件可以解决问题。

于 2009-04-30T22:13:32.863 回答
2

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

我们更改了 Cpp-unit-lite 以生成类似 JUnit 的 XML 报告文件,并且 CruiseControl 获取了 XML 报告文件。

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

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

不如内置的单元测试报告好,但您可以快速开始工作。

于 2009-01-07T09:49:59.517 回答
2

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

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

您可以转换您的 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>

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

问候

于 2009-03-31T14:20:29.617 回答
1

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

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

切换到 gtest 的动机之一是它确实生成 junit XML,因此理论上,hudson 可以解析测试结果并以更明智的方式发布它们。无论如何,它看起来不像 UnitTest++ 生成这样的东西(如果我错了,请纠正我),所以这可能是一个有争议的问题,但至少将它集成到你的构建过程中将确保测试在运行期间运行构建。

于 2009-01-05T19:08:23.103 回答