我有一个库目录有几个子目录,每个子目录都有自己的单元测试。要运行它们,我增加了以下测试目标:
test: $(addprefix test-,$(SUBDIRS))
test-%:
$(MAKE) -k --directory=$* test
这是很酷的,因为它运行在每个子目录中的测试,可以使用分布式的,例如做测试-j5。但是,它有一个问题。理想情况下,我想在所有目录中运行测试,而不管个别目录中的失败。我还希望能够总结最后的失败,并且(更重要的是)能够在一个或多个测试失败时返回非零退出代码。上面的代码运行所有测试,但不打印摘要,也不打印非零退出状态。
这是一些更复杂的代码,它可以做我想做的事情。这不是很优雅,但:
clean_test:
rm -f testfailures
test: clean_test
$(MAKE) $(addprefix test-,$(SUBDIRS))
@echo "=== TEST SUMMARY ==="
@if [ -f $(BUILD_DIR)/testfailures ]; then \
echo "The following tests failed:"; \
cat $(BUILD_DIR)/testfailures; \
false; \
else \
echo "All tests passed."; \
fi
test-%:
$(MAKE) -k --directory=$* test || echo \
" $*" >> $(BUILD_DIR)/testfailures
来源
2012-09-26 03:23:03
dbn
我很想在Python之外重新发布这个问题,因为没有好的全面解决方案。 – dbn 2012-11-30 09:00:33
请包括Makefile的相关部分。 *这里*链接不给我一个Makefile。 – reinierpost 2017-02-24 10:17:22