簡體   English   中英

如何使柯南測試 package 需要它正在測試的 package? 具體如果package版本是動態的?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM