我有一个 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
。
我想知道是否有更优雅或标准的方法可以使资源文件可用于单元测试。