You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何强制CMake在make test后输出测试结果?Fortran项目FRUIT测试问题

解决CMake构建Fortran项目时FRUIT测试结果输出到控制台的问题

你遇到的情况是FRUIT默认不会把测试结果直接打印到控制台,而是可能写入文件,比如你给出的这段测试结果:

Test module initialized . : successful assert, F : failed assert
7.00000000000000 -3.60000000000000 7.00000000000000
FFF
Start of FRUIT summary:
Some tests failed!
-- Failed assertion messages:
[not_set]:Expected [7.00000000000000], Got [1.00000000000000]
[not_set]:Expected [-3.60000000000000], Got [2.00000000000000]
[not_set]:Expected [7.00000000000000]...

结合CMake构建Fortran项目的场景,我给你几个实用的解决方案:

方案1:修改测试代码,让FRUIT直接输出到控制台

FRUIT提供了fruit_set_output_unit子程序来指定输出目标,Fortran里标准输出(控制台)的单元号是6。你只需要在测试程序的初始化部分,也就是call fruit_init()之后、测试用例之前,添加这一行代码:

call fruit_set_output_unit(6)

修改后,FRUIT就会把所有测试结果(包括失败断言的详细信息)直接打印到控制台,不用再去翻结果文件。

方案2:通过CMake自动打印FRUIT结果文件

如果不想改动测试代码,你可以在CMake配置里加一个后续步骤,自动读取FRUIT生成的结果文件并输出到控制台。假设FRUIT默认生成的结果文件是fruit_results.txt,可以这么写CMake代码:

# 先定义你的测试可执行文件
add_executable(my_fruit_tests test_foo.f90 test_bar.f90)
target_link_libraries(my_fruit_tests PRIVATE fruit_library)

# 添加执行测试的指令
add_test(NAME RunFruitTests COMMAND $<TARGET_FILE:my_fruit_tests>)

# 添加打印结果的步骤,依赖于测试执行完成
add_test(NAME PrintFruitResults 
         COMMAND ${CMAKE_COMMAND} -E cat ${CMAKE_CURRENT_BINARY_DIR}/fruit_results.txt)
set_tests_properties(PrintFruitResults PROPERTIES DEPENDS RunFruitTests)

当你运行ctest时,会先执行测试生成结果文件,然后自动把文件内容打印到控制台。${CMAKE_COMMAND} -E cat是跨平台的,Windows、Linux、macOS都能正常用。

方案3:利用FRUIT的命令行参数(如果支持)

有些版本的FRUIT支持通过命令行参数指定输出到标准输出,比如--stdout之类的(具体要看你用的FRUIT版本)。如果支持的话,直接在CMake的测试命令里加上参数就行:

add_test(NAME MyFruitTests 
         COMMAND $<TARGET_FILE:my_fruit_tests> --stdout)

这样测试程序会直接把结果输出到控制台,不需要额外处理。

这几个方案都能帮你在控制台看到FRUIT的测试结果,选哪个看你的需求——修改代码最直接,CMake方案适合不想动测试代码的场景。

内容的提问来源于stack exchange,提问作者Konrad Rzońca

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:07:38