如何 运行 在 Makefile 中测试二进制文件的用例

How to run test cases for a binary in Makefile

有一个生成二进制应用程序的小项目。源代码是 C,我正在使用 autotools 创建 Makefile 并构建二进制文件 - 它也能正常工作。

我想 运行 使用该二进制文件测试用例。这是我所做的:

SUBDIRS = src
dist_doc_DATA = README

TESTS=
TESTS+=tests/config1.conf
TESTS+=tests/config2.conf
TESTS+=tests/config3.conf
TESTS+=tests/config4.conf
TESTS+=tests/config5.conf
TESTS+=tests/config6.conf
TESTS+=tests/config7.conf
TESTS+=tests/config8.conf
TESTS+=tests/config9.conf
TESTS+=tests/config10.conf
TESTS+=tests/config11.conf

我想运行这些案例作为工具的参数。当我运行make check时,我得到:

make[3]: Entering directory '/home/airween/src/mytool'
FAIL: tests/config1.conf
FAIL: tests/config2.conf
FAIL: tests/config3.conf

这是正确的,因为这些文件是简单的配置文件。

我如何使用上面的脚本解决 make check 运行 我的工具,最后我得到一个列表,其中包含成功、失败、...测试的数量,就像在那种情况下一样:

============================================================================
Testsuite summary for mytool 0.1
============================================================================
# TOTAL: 11
# PASS:  0
# SKIP:  0
# XFAIL: 0
# FAIL:  11
# XPASS: 0
# ERROR: 0

编辑:所以我想效仿这些 运行s:

for f in `ls -1 tests/*.conf; do src/mytool ${f}; done

但是 - 当然 - 我想在最后看到摘要。

谢谢。

Autotools 的 built-in 测试 运行ner 希望您通过 make 变量 TESTS 指定可执行测试的名称。您不能只是将随机文件名放在那里并期望 make 或 Automake 知道如何处理它们。

测试可以是构建的程序、生成的脚本、随项目分发的静态脚本,或者以上的任意组合。

How can I solve that make check runs my tool with the scripts above, and finally I get a [test summary report]?

您已经确认您的配置文件不是脚本,所以不要那样称呼它们!这其实是问题的症结所在。最简单的解决方案可能是创建实际的可执行脚本,每种情况一个,并在 TESTS 变量中命名 those。每个人都会 运行 使用适当的配置文件测试二进制文件(也就是说,如果这些是您要执行的测试,您有责任让他们这样做)。

另见 the Automake Manual's chapter on tests

好的,来自here的解决方案:

tests/Makefile.am:
==================

TEST_EXTENSIONS = .conf
CONF_LOG_COMPILER = ./test-suit.sh


TESTS=
TESTS+=config1.conf
TESTS+=config2.conf
TESTS+=config3.conf
TESTS+=config4.conf
TESTS+=config5.conf
TESTS+=config6.conf
TESTS+=config7.conf
TESTS+=config8.conf
TESTS+=config9.conf
TESTS+=config10.conf
TESTS+=config11.conf
test/test-suit.sh:
==================

#!/bin/sh

CONF=

exec ../src/mytool $CONF

结果:

make check
...
PASS: config1.conf
PASS: config2.conf
PASS: config3.conf
PASS: config4.conf
PASS: config5.conf
PASS: config6.conf
PASS: config7.conf
PASS: config8.conf
PASS: config9.conf
PASS: config10.conf
PASS: config11.conf
============================================================================
Testsuite summary for mytool 0.1
============================================================================
# TOTAL: 11
# PASS:  11
# SKIP:  0
# XFAIL: 0
# FAIL:  0
# XPASS: 0
# ERROR: 0
============================================================================

这是我所期望的。