如何使Catch2版本3测试在Android设备上使用logcat?

aiqt4smr  于 2023-05-15  发布在  Android
关注(0)|答案(1)|浏览(167)

我有一个基于cmake + Qt的项目,它编译得很好,可以在我的Android设备上运行。当使用qDebug时,我看到打印到logcat(在Qt Creator内)的内容。但是Catch 2没有输出。我怀疑,它一直打印到stdout或stderr,这是不可见的。
CMakeLists.txt:

cmake_minimum_required(VERSION 3.14)

project(test LANGUAGES CXX)

set(CMAKE_AUTOUIC ON)
set(CMAKE_AUTOMOC ON)
set(CMAKE_AUTORCC ON)

set(CMAKE_CXX_STANDARD_REQUIRED ON)

find_package(QT NAMES Qt6 REQUIRED COMPONENTS Core)
find_package(Qt${QT_VERSION_MAJOR} REQUIRED COMPONENTS Core Gui)

set(CMAKE_CXX_STANDARD 20)

set(UNITTESTS_SOURCES
    main.cpp
)

include(FetchContent)
FetchContent_Declare(catch2 GIT_REPOSITORY https://github.com/catchorg/Catch2.git GIT_TAG v3.3.2)
FetchContent_MakeAvailable(catch2)

qt_add_executable(test ${UNITTESTS_SOURCES})
target_link_libraries(test PUBLIC Catch2::Catch2 Qt::Core Qt::Gui)

install(TARGETS test
    LIBRARY DESTINATION ${CMAKE_INSTALL_LIBDIR}
    RUNTIME DESTINATION ${CMAKE_INSTALL_BINDIR}
)

main.cpp

#include <catch2/catch_test_macros.hpp>
#include <catch2/catch_session.hpp>

int main( int argc, char* argv[] ) {
    int result = Catch::Session().run( argc, argv );
    std::fflush(stdout);
    return result;
}

TEST_CASE("hello from catch")
{
    CHECK(false);
}

我已经看到,在<catch 2/internal/catch_config_android_logwrite.hpp>中有一些与logcat相关的类,但是断点不会被命中。我链接到qt,但在一个最小的例子中,qt没有调用任何东西。
我怎样才能使Catch 2将其输出打印到logcat?

6yjfywim

6yjfywim1#

答案很简单。
您必须使用-o %debug运行测试,也就是说,将其添加为命令行参数。

相关问题