[英]How do I make a Conan test package require the package that it is testing? Specifically if the package version is dynamic?
假設我有一個 package:
from conans import ConanFile
class MainLibraryPackage(ConanFile):
name = 'main'
description = 'stub'
def set_version(self):
self.version = customFunctionToGetVersion()
...
我有一個測試 package:
import os
from conans import ConanFile, CMake
class MainLibraryTests(ConanFile):
"""
Conan recipe to run C++ tests for main library
"""
settings = 'arch', 'build_type', 'os', 'compiler'
generators = "cmake"
def requirements(self):
self.requires("gtest/1.12.1")
self.requires(<my main library, somehow?>)
def build(self):
cmake = CMake(self)
cmake.configure()
cmake.build()
def test(self):
print("THIS IS A TEST OF THE TEST")
if not tools.cross_building(self):
os.chdir("bin")
self.run(".%smain_tests" % os.sep)
我如何實際添加主要 package 作為要求? 如果我這樣做,是否會為我的測試 package 正確填充CMakeLists.txt
中的CONAN_LIBS
變量? 謝謝!
歡迎來到柯南社區!
您的答案取決於您運行的是哪個 Conan 版本。
對於 Conan 1.x,如果您運行 conan conan create
命令,您的 package 將自動被測試 package 使用。 但是,如果要逐步開發並運行conan test test_package <reference>
則需要通過命令行傳遞引用。 不過,您不需要將 package 添加為要求,對於這兩種情況,Conan 都會自動解決。
然而,柯南 2.x 仍處於 Beta 階段,但非常接近於穩定發布。 在柯南 2.x 上,測試 package 將不再自動管理您的 package,您需要聲明為要求,您在問題中到底在做什么。 而且,如果您在test_package/conanfile.py
中添加屬性test_type = "explicit"
,則此行為與 Conan 1.x 兼容
所以回答你的問題,你應該使用:
self.requires(self.tested_reference_str)
self.tested_reference_str
將自動為您解析您的 package 引用,因此您無需關心哪個版本或名稱,它與您的柯南命令使用的相同。
有關更多信息,我建議您閱讀官方文檔:
入門那里有關於測試您的 package 的部分: https://docs.conan.io/en/latest/creating_packages/getting_started.html#getting-started
如何為柯南 2.x 准備測試包: https://docs.conan.io/en/latest/migrating_to_2.0/recipes.html#changes-in-the-test-package-recipe
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.