NetBeans生成的Makefile忽略测试返回代码 我在NETBeCes中使用生成的MaxFi文件进行C++项目。我在Jenkins(持续集成服务器)中设置了一个作业来运行在NetBeans中配置的测试。现在Jenkins运行测试并捕获其输出,但即使测试失败,它也认为构建成功

NetBeans生成的Makefile忽略测试返回代码 我在NETBeCes中使用生成的MaxFi文件进行C++项目。我在Jenkins(持续集成服务器)中设置了一个作业来运行在NetBeans中配置的测试。现在Jenkins运行测试并捕获其输出,但即使测试失败,它也认为构建成功,c++,testing,netbeans,makefile,automated-tests,C++,Testing,Netbeans,Makefile,Automated Tests,我使用的是Boost单元测试框架,它当然会像任何适当的*nix程序一样,在失败时返回非零代码。所以我想知道为什么詹金斯不明白考试失败的原因。然后,我在NetBeans生成的Makefile-Debug.mk中发现: # Run Test Targets .test-conf: @if [ "${TEST}" = "" ]; \ then \ ${TESTDIR}/TestFiles/f1 || true; \ ${TESTDIR}/TestFil

我使用的是Boost单元测试框架,它当然会像任何适当的*nix程序一样,在失败时返回非零代码。所以我想知道为什么詹金斯不明白考试失败的原因。然后,我在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跟踪器中找到一个bug,但在我的简短搜索中没有发现任何bug


还有其他合理的解决办法吗?如果任何测试失败,我希望Jenkins让我的构建失败。目前,只有当测试生成失败时才会失败,但如果它生成并运行失败,则会报告成功。

事实证明,NetBeans(至少在版本8之前)无法支持此功能。为了解决这个问题,我在Jenkins中做了
makebuildtests
而不是
maketest
,然后在所有生成的测试文件(build目录中的
TestFiles/f*
)上循环运行它们

这是NetBeans的Makefile生成器的一个主要缺点,因为它与在NetBeans之外运行测试根本不兼容。感谢@HEKTO提供的链接,该链接将我带到了关于编写NetBeans测试插件的页面:

该页面告诉您的基本情况是,NetBeans依赖于解析测试的文本输出来确定成功或失败。它没有告诉您的是,NetBeans生成了有缺陷的makefile,这些makefile忽略了测试中的关键故障,包括中止、分段故障、断言故障、未捕获的异常等。它假设您将使用它知道的测试框架(这只是一个单元),或者在测试程序的正确时刻手动编写神奇字符串


我想花点时间为Boost单元测试框架编写一个NetBeans单元测试插件,但这对Jenkins毫无帮助:这些插件只在NetBeans内部运行测试时使用,以显示漂亮的状态指示器。

我在NetBeans生成的
nbproject/Makefile Debug.mk
中没有看到这段代码。在我的系统上,这个文件中没有关于测试的内容。你是怎么得到这个测试规则的?(我在NETBeaS 8上没有java EE和服务器——这可能就是原因吗?)我使用C++的NETBeaS 8。我刚才通过创建一个新的C++应用程序测试,然后添加一个新的C++简单测试。我替换了
返回(退出成功)位于testmain()的底部,带有
throw。当我运行测试时,NetBeans报告它成功(!),尽管main()返回非零并且stderr显示
中止(内核转储)
。显然,NETBeice测试结果报告通过在StdUT中对魔术字符串进行GLUE操作,例如“代码> %TestOpTalk %s/code >(这在默认生成的C++简单测试代码中显示),并且忽略返回值。这太令人震惊了。看起来这个“简单测试”只是一个模板,不是真实的东西。我为您找到了相当长的教程页:。他们说您需要添加“CUnit”测试框架。还没有一个关于詹金斯的词……“CPPUnter”也用于C++…但是我自己没有这么做