CMAKE生成测试数据



我的测试需要在运行之前存在一些数据文件。这些文件很大,因此我不想将它们提交给我的VC,而是使用脚本按需生成它们。但是生成文件也需要大量时间,因此我只想每次运行make test时只生成一次。

是否有可能让我的测试取决于磁盘上的文件的存在,并告诉cmake如果该文件不存在或不在日期之外,则可以再生该文件?

我尝试了以下内容,但似乎不起作用:

enable_testing()
add_test(NAME foo COMMAND bla myfile.txt)
set_tests_properties(foo PROPERTIES DEPENDS myfile.txt)
add_custom_command(OUTPUT myfile.txt COMMAND createmyfile)

根本可以吗?

是的,根本可能。cmake可以在目标和文件之间添加依赖关系,而这些文件不需要是源文件。

您的代码步骤看起来不错(我没有构建),但我认为缺少的是测试的构建。

我使用add_custom_target代替add_custom_command

cmakelists.txt

cmake_minimum_required(VERSION 2.8.12)
add_library(mylib SHARED mylib.cpp)
# Create out.dat as an example 
add_custom_target(testfile_outdat COMMAND touch out.dat)
add_executable(mytest mytest.cpp)
target_link_libraries(mytest mylib)
add_dependencies(mytest testfile_outdat)
add_test(NAME mytest COMMAND mytest)

此示例在执行时生成代码。如果数据未通过测试修改,则该解决方案适合。

测试数据创建取决于目标mytest 的制成,而不是声明要将mytest用作测试

取决于创建测试数据文件的命令,某些特定于平台的内容可能是可能的。因此,您可以根据支持平台创建不同的custom_targets。

mylib.h

bool compare(int a, int b);

mylib.cpp

#include "mylib.h"
bool compare(int a, int b)
{
    return a == b;
}

mytest.cpp

#include <stdio.h>
#include "mylib.h"
int main(int arcc, char* argv[])
{
    bool actual = compare(1, 1);
    bool expected = true;
    printf("Testresult %sn", (actual == expected) ? "OK" : "Failed");
    return 0;
}

相关内容

  • 没有找到相关文章

最新更新