【问题标题】:Autotools: How to run a single test using make check?Autotools:如何使用 make check 运行单个测试?
【发布时间】:2016-11-19 13:54:25
【问题描述】:

我目前正在开发一个使用自动工具生成 makefile 的项目。像往常一样,这个 makefile 支持make check,运行整个测试套件。但是,我正在处理该程序的一小部分,其中只应用了几个单元测试。是否可以使用 make check 运行单个单元测试或单元测试选择,而不是整个套件?

编辑: Evan VanderZee suggests 这取决于目录结构,所以让我再解释一下目录结构。这个项目的目录结构非常平坦。大多数源文件都在src/ 目录中,其中一些在src/ 下的子目录中。单元测试位于src/tests。没有一个源目录包含 Makefile。顶层只有一个makefile(由configure生成)。

【问题讨论】:

    标签: unit-testing makefile autotools


    【解决方案1】:

    答案取决于您使用的特定 makefile。如果测试具有目录结构,您通常可以导航到子目录并在子目录中运行make check

    由于您稍后解释说您的目录结构是扁平的,如果没有实际看到一些 makefile 就很难说。如果您知道为要运行的特定测试创建的可执行文件的名称,则可以运行 make name_of_test 来构建要运行的测试。这不会运行测试,只会构建它。构建后,测试可能驻留在测试目录中。在此之后,您可以进入测试目录并以运行可执行文件的典型方式运行测试,但是如果测试依赖于库,您可能需要告诉测试在哪里可以找到这些库,也许通过添加一些库到LD_LIBRARY_PATH

    如果这是您想要经常做的事情,可以修改 makefile 以支持运行您想要运行的特定测试。通常这将涉及编辑 Makefile.amMakefile.in 然后重新配置,但我还没有足够的信息来建议您需要进行哪些编辑。

    【讨论】:

    • 运行make,即使没有任何参数,也可以构建修改后的测试。就像你说的,我可以像普通的可执行文件一样运行测试。测试套件需要一些时间才能运行,当您只对少数测试感兴趣时,这并不有趣。这个解决方案对我来说已经足够好了。谢谢!
    【解决方案2】:

    如果您使用 Automake 的 TESTS 变量来列出 make check 运行的测试,那么有一个简单的快捷方式:make check TESTS='name-of-test1 name-of-test2' 在命令行中传递的 TESTS 变量会覆盖 Makefile 中的变量。

    或者,export TESTS='names-of-tests'; make -e check 从环境中获取 TESTS 的值。

    如果您没有使用TESTS,而是使用check-local 或其他一些目标,那么这将不起作用。

    【讨论】:

    • 这就是我想要的。这使我可以使用通常的程序有选择地检查测试。谢谢!
    猜你喜欢
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2011-04-02
    • 2012-06-05
    • 2017-08-07
    • 2016-03-25
    • 2016-11-21
    • 1970-01-01
    相关资源
    最近更新 更多