Cmake用水果测试

时间:2013-07-11 08:10:35

标签: testing cmake fortran

我有一个使用水果进行测试的项目(fortran代码)。 这是我的代码。

calculator.f90

module calculator
   implicit none
   contains
   subroutine add (a, b, output)
       integer, intent(in) :: a, b
       integer, intent(out):: output
       output = a+b
   end subroutine add
end module calculator

我的测试 calculator_test.f90

module calculator_test
   use fruit
   contains
   subroutine test_5_2_2
      use calculator, only: add
      integer :: result
      call add(2,2,result)
      call assertEquals(4,result)
   end subroutine test_5_2_2

   subroutine test_5_2_3
      use calculator, only: add
      integer :: result
      call add(2,3,result)
      call assertEquals(5,result)
   end subroutine test_5_2_3
end module

现在我想使用Cmake来构建和运行我的测试(由jenkins触发),所以我的问题是:我是否需要更改测试或是否可以运行我通过cmake编写的测试,如果是这样怎么样? 我在网上搜索了很多,但是用cmake进行的所有测试似乎都是用c ++完成的,然后是使用可执行的testfiles文件。

谢谢! -Minde

1 个答案:

答案 0 :(得分:1)

您可以按原样运行测试,只需要告诉CMake如何运行它们。这就是COMMAND的{​​{1}}参数。

ADD_TEST

通常,您会看到一些类似上面的示例,其中命令是可执行文件(如您在c ++示例中所见)。但它不一定是。例如,我正在通过CMake运行python测试,我就像这样添加测试:

ENABLE_TESTING()
ADD_TEST(NAME "YourTest" 
    WORKING_DIRECTORY ${TEST_DIRECTORY}
    COMMAND ${TEST_DIRECTORY}/test_dim)

所以,要运行你的Fruit测试,你会调用为你创建Fruit测试运行器的命令(我相信它是一个ADD_TEST(NAME PythonTests WORKING_DIRECTORY ${TEST_DIRECTORY} COMMAND ${PYTHON_EXECUTABLE} setup.py test 命令......我会假设这是真的,但你应该替换您在命令行上实际调用的任何内容来运行测试):

rake

当您在命令行上运行ADD_TEST(NAME FruitTests WORKING_DIRECTORY ${TEST_DIRECTORY} COMMAND rake test) # Or whatever the command is. 时,它应该告诉您“FruitTests”是否失败或成功。

提醒 CMake通过程序的退出代码确定测试的成功或失败。默认情况下,Fortran程序没有退出代码(如果有,则始终为0)。当我使用Fruit和CMake进行Fortran测试时,我自己编写测试运行器并使用make test内置子例程来确保将退出代码返回给CMake。我不确定Fruit的自动测试运行器创建者是否这样做;你必须自己验证。