我有一个Conan / CMake项目,它有一些用Catch2编写的单元测试。这是项目层次结构:
├── conanfile.py
├── CMakeLists.txt
├── include
│ └── ...
├── src
│ └── ...
└── test
└── resources
├── resource1.xml
└── ...
└── src
└── unit_test1.cpp
└── ...
在单元测试中,我想从资源文件中读取,例如:
readFile("test/resources/resource1.xml");
资源文件只能用于单元测试。它们对最终产品应用毫无用处。
另外,我想在conanfile.py
的构建步骤中运行单元测试,以便在单元测试失败时构建失败。所以conanfile.py
看起来像这样(最后一行运行测试):
class TestConan(ConanFile):
settings = "os", "compiler", "build_type", "arch"
generators = "cmake"
build_requires = "catch2/2.2.1@bincrafters/stable"
exports_sources = "CMakeLists.txt", "include*", "src*", "test/src*", "test/resources*"
def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()
self.run(os.sep.join(["bin", "unitTests"]))
这是有效的,但前提是资源位于test/resources
目录中,相对于单元测试二进制文件的执行位置。这在单元测试源中也是硬编码的。还要注意
"test/resources*"
中的export_sources
需要conanfile.py
。
我想知道是否有更优雅或标准的方法使资源文件可用于单元测试。