小编Sil*_*svb的帖子

锁定环境中 Fortran 的基本单元测试

尝试将一些基本单元测试添加到大量现有(Fortran 90)代码中,这是一种明智的方法,即仅在锁定系统上开发人员,没有机会安装任何第三方框架。我只能使用标准的 Linux 工具。目前,代码库是使用非常有限的一组测试在完整系统级别进行测试的,但这非常耗时(运行多天),因此在开发过程中很少使用

理想情况下,希望能够逐步向关键系统添加有针对性的测试,而不是在一次尝试中彻底检修整个代码库。

采用下面的示例模块,并假设断言类型宏的实现,如Fortran 中的 Assert中详细说明

MODULE foo
    CONTAINS
    FUNCTION bar() RESULT (some_output)
        INTEGER :: some_output
        some_output = 0
    END FUNCTION bar
END MODULE foo
Run Code Online (Sandbox Code Playgroud)

我想到了几种可能的方法,但实施这些方法可能会遇到我不知道的技术或管理挑战:

  1. 每个模块都有单独的测试模块,如下所示,并有一个主测试运行程序来调用每个模块内的每个函数

    MODULE foo_test
        CONTAINS
        SUBROUTINE bar_test()
         ! ....
        END SUBROUTINE bar_test()
    END MODULE foo_test
    
    Run Code Online (Sandbox Code Playgroud)
  2. 与上面类似的方法,但每个测试都有单独的可执行文件。明显的好处是,单个故障不会终止所有测试,但可能更难管理大量测试可执行文件,并且可能需要大量额外代码。

  3. 使用预处理器包含每个模块中包含测试的主函数,例如在带有 C/C++ 风格宏的 gfortran Fortran 90 中(例如 #define SUBNAME(x) s ## x),并使用构建脚本自动测试 main 的存储主代码文件中的预处理器分隔符之间。

我尝试过使用一些现有的 Fortran 框架(如 >为什么 Fortran 中的单元测试框架依赖 Ruby 而不是 Fortran 本身? > 中所述),但对于这个特定的项目,不可能安装其他工具我正在使用的系统。

linux testing legacy fortran unit-testing

5
推荐指数
1
解决办法
1443
查看次数

标签 统计

fortran ×1

legacy ×1

linux ×1

testing ×1

unit-testing ×1