0

CMake で CppUTest プロジェクトをセットアップしようとしています。私はCMakeが初めてなので、この例から始めました:リンク

それは正常に動作します。プロジェクトがコンパイルされ、テストが実行されたことがわかります。

次に、この例に基づいて独自のプロジェクトを作成しようとしました。私のプロジェクトもエラーなしでコンパイルされますが、常に次の出力が得られます。 OK (0 tests, 0 ran, 0 checks, 0 ignored, 0 filtered out, 0 ms)

CppUTest フレームワークが、作成したテストを「認識しない」理由がわかりません。

私がやったことは次のとおりです: 次のようなプロジェクト構造を作成しました:

.unit_tests_prj
|--project
|--code
|    |-CMakeLists.txt
|    |-Tests
|    |    |-CMakeLists.txt
|    |    |-RunAllTests.cpp
|    |    |-leds_tests
|    |    |      |-leds_tests.cpp

コード ディレクトリの CMakeLists.txt ファイルには、次のコードが含まれています。

cmake_minimum_required(VERSION 2.8.7)
project(rgb_lamp_unit_tests)

# Check if env variable for CppUTest dir is valid
if(DEFINED ENV{CPP_UTEST_HOME})
    message("Found CppUTest home dir at: $ENV{CPP_UTEST_HOME}")
else()
    message("Not found CppUTest directory... Finish build!")
    return()
endif()

include_directories($ENV{CPP_UTEST_HOME}/include)
# set c & cpp lang
enable_language(C)
enable_language(CXX)

# version number
set(rgb_lamp_unit_tests_VER_MAJOR 1)
set(rgb_lamp_unit_tests_VER_MINOR 0)

set(CMAKE_RUNTIME_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/bin)
set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)
set(CMAKE_ARCHIVE_OUTPUT_DIRECTORY ${PROJECT_BINARY_DIR}/lib)

# add sources subdirectories for cmake
add_subdirectory(Tests)

code/Tests ディレクトリの CMakeLists.txt には以下が含まれます。

project(rgb_lamp_unit_tests)

# add include dirs for CppUTestHome
include_directories($ENV{CPP_UTEST_HOME}/include)

# add cpputest framework library
add_library(cpputest_lib STATIC IMPORTED)
set_property(TARGET cpputest_lib PROPERTY IMPORTED_LOCATION $ENV{CPP_UTEST_HOME}/lib/libCppUTest.a)

# build static library from tests modules
add_library(LedDriverTest ./leds_tests/leds_tests.cpp)

# build executable and link all necessary libs
add_executable(RunAllTests RunAllTests.cpp)
target_link_libraries(RunAllTests cpputest_lib LedDriverTest)

leds_tests.cpp には以下が含まれます。

#include "CppUTest/TestHarness.h"   // include cppUtest framework

TEST_GROUP(LedDriver)
{

  uint16_t virtualLeds;
 
  void setup()
  {
    virtualLeds = 0;
  }

  void teardown() 
  {
  }
};

TEST(LedDriver, LedsAreOffAfterCreate)
{
    FAIL("This should fail!");
} 

また、 leds_test.cpp の内容を次のように変更したときに気付きました:

#include <iostream>
void print_something(){
  std::cout << "some text" << std::endl;
}

そして RunAllTests.cpp で次のことを行いました:

extern void print_something();
int main(int argc, char** argv){
  print_something();
  //CommandLineTestRunner::RunAllTests(argc, argv);
}

次に、コンソール出力に「テキスト」が表示されました。したがって、LedDriverTest.a は RunAllTests 実行可能ファイルに正しくリンクされています。

仕事に単体テストと tdd を導入したいので、誰かがそれを手伝ってくれたらありがたいです。

よろしく、mf

4

0 に答える 0