gpt4 book ai didi

c++ - NetBeans 生成的 Makefile 忽略测试返回码

转载 作者:太空宇宙 更新时间:2023-11-04 11:31:29 24 4
gpt4 key购买 nike

我在 NetBeans 中有一个使用生成的 Makefile 的 C++ 项目。我在 Jenkins(持续集成服务器)中设置了一个作业来运行在 NetBeans 中配置的测试。现在 Jenkins 运行测试并捕获它们的输出,但即使测试失败,它也会认为构建成功。

我正在使用 Boost 单元测试框架,它当然会像任何适当的 *nix 程序一样在失败时返回非零代码。所以我想知道为什么 Jenkins 在测试失败时不理解。然后我在 NetBeans 生成的 Makefile-Debug.mk 中找到了这个:

# Run Test Targets
.test-conf:
@if [ "${TEST}" = "" ]; \
then \
${TESTDIR}/TestFiles/f1 || true; \
${TESTDIR}/TestFiles/f2 || true; \
else \
./${TEST} || true; \
fi

所以他们似乎故意忽略了所有测试的返回值。但这没有意义,因为那你的测试测试的是什么?

我试图在 NetBeans 中找到一个设置来表示“让失败的测试破坏构建”,但没有找到任何东西。为此,我还尝试在 NetBeans 跟踪器中查找错误,但在我的简短搜索中没有发现任何错误。

还有其他合理的解决办法吗?如果任何测试失败,我希望 Jenkins 使我的构建失败。目前它仅在测试未能构建时失败,但如果它构建但未能运行,则报告成功。

最佳答案

事实证明,NetBeans(至少版本 8)不支持这一点。为了解决这个问题,我所做的是在 Jenkins 中执行 make build-tests 而不是 make test,然后循环遍历所有生成的测试文件 (TestFiles/f* 在构建目录中)运行它们。

这是 NetBeans 的 Makefile 生成器的一个主要缺点,因为它与在 NetBeans 本身之外运行的测试根本不兼容。感谢@HEKTO 提供的链接使我进入了有关编写 NetBeans 测试插件的页面:http://wiki.netbeans.org/CND69UnitTestsPluginTutotial

该页面告诉您的基本上是 NetBeans 依靠解析测试的文本输出来确定成功或失败。它没有告诉您的是 NetBeans 生成了有缺陷的 Makefile,这些 Makefile 忽略了测试中的严重失败,包括中止、段错误、断言失败、未捕获的异常等。它假设您将使用它知道的测试框架(这只是CppUnit),或者在测试程序的适当时刻手动编写魔术字符串。

我考虑过花时间为 Boost 单元测试框架编写一个 NetBeans 单元测试插件,但这对 Jenkins 一点帮助都没有:这些插件仅在 NetBeans 本身内部运行测试时使用,以显示漂亮的状态指标。

关于c++ - NetBeans 生成的 Makefile 忽略测试返回码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24624954/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com