3

在给定的情况下,如何计算测试代码中数据夹具文件的路径:

  • test/{main.cpp,one_test.cpp,two_test.cpp}
  • 编译完成build/
  • test/fixtures/{conf_1.cfg}

我面临的问题如下:

/* in test/one_test.cpp */
TEST_CASE( "Config from file", "[config]" ) {
  Config conf;
  REQUIRE( conf.read(??? + "/conf_1.cfg") )
}

到目前为止我找到的解决方案是在配置时定义一个宏:

#define TEST_DIR "/absolute/path/to/test"

这是在我wscript的 with中获得的

def configure(cnf):
    # ...
    cnf.env.TEST_DIR = cnf.path.get_src().abspath()
    cnf.define('TEST_DIR', cnf.env.TEST_DIR)
    cnf.write_config_header('include/config.h')

其他尝试包括__FILE__扩展为../test/one_test.cpp,但我无法使用它。

一些背景知识:我正在使用Catch 测试框架waf 构建工具

是否有可能取决于测试框架的常见做法或模式?

4

1 回答 1

1

我们发现这在编译/构建时很难解决,因为重构组件(以及因此测试)会移动代码。我们找到了两种可能的解决方案:

  1. 将数据放入测试中。这只有在简短且易于阅读的情况下才实用 - 字符串或简单的十六进制转储。如果这样可以使测试更易于维护,您总是可以将数据放入头文件中。
  2. 运行测试时,在命令行中指定数据文件的位置。为此,您可能需要自己的 main(请参阅“提供自己的 main()”
于 2015-07-09T19:45:39.150 回答