Ich habe versucht, Google Test und CMake in C zu verwenden

Dies ist ein Beispiel, das mit cmake unter Verwendung von googletest für C erstellt werden soll.

Ein Beispiel ist das Buch Testgetriebene Entwicklung für Embedded C / [Embedded-Programmierung mit testgetriebener Entwicklung](https: / Es kann als Skelett für den LED-Treiber unter /www.oreilly.co.jp/books/9784873116143/) verwendet werden.

Verzeichnisaufbau

build/Verzeichnis zum Erstellen
ext/
ext/googletest googletest Quellcode
inc/Header
src/Quelle
test/Prüfung

Vorbereitung für den Google-Test

Initialisieren Sie git und holen Sie sich den Google-Test.

% git init
% mkdir build ext inc src test
% cd ext
% git submodule add https://github.com/google/googletest.git

Erstellen Sie eine cmake-Datei für googletest.

CMakeLists.txt


project("led driver")
cmake_minimum_required(VERSION 2.8)
add_subdirectory(ext)

ext/CMakeLists.txt


option(BUILD_GTEST "Builds the googletest subproject" ON)
option(BUILD_GMOCK "Builds the googlemock subproject" OFF)
add_subdirectory(googletest)

Build im Build-Verzeichnis.

$ cd build
$ cmake ..
-- The C compiler identification is GNU 4.8.4
-- The CXX compiler identification is GNU 4.8.4
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Found PythonInterp: /usr/bin/python (found version "2.7.6")
-- Looking for include file pthread.h
-- Looking for include file pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Configuring done
-- Generating done
-- Build files have been written to: /home/sekine/github/leddriver2/build
$ make
Scanning dependencies of target gtest
[ 50%] Building CXX object ext/googletest/googletest/CMakeFiles/gtest.dir/src/gtest-all.cc.o
Linking CXX static library libgtest.a
[ 50%] Built target gtest
Scanning dependencies of target gtest_main
[100%] Building CXX object ext/googletest/googletest/CMakeFiles/gtest_main.dir/src/gtest_main.cc.o
Linking CXX static library libgtest_main.a
[100%] Built target gtest_main

Git legt die Arbeit bisher fest.

$ cd ..
$ git add CMakeLists.txt ext/CMakeLists.txt
$ git commit -m "setup googletest."

Quellcode-Beispiel

inc/LedDriver.h


#ifndef LEDDRIVER_H
#define LEDDRIVER_H

void LedDriver_Create(uint16_t *address);
void LedDriver_Destroy(void);
void LedDriver_TurnOn(int ledNumber);
void LedDriver_TurnOff(int ledNumber);

#endif

src/LedDriver.c


#include <stdint.h>
#include "LedDriver.h"

static uint16_t *ledsAddress;

void LedDriver_Create(uint16_t *address)
{
    ledsAddress = address;
    *ledsAddress = 0;
}

void LedDriver_Destroy(void)
{
}

void LedDriver_TurnOn(int ledNumber)
{
    *ledsAddress = 1;
}

void LedDriver_TurnOff(int ledNumber)
{
    *ledsAddress = 0;
}

test/LedDriverTest.cpp


#include <stdint.h>
#include "gtest/gtest.h"
extern "C"
{
#include "LedDriver.h"
}

uint16_t virtualleds;

class LedDriver : public ::testing::Test
{
protected:
    virtual void SetUp()
    {
        LedDriver_Create(&virtualleds);
    }
    virtual void TearDown()
    {
        LedDriver_Destroy();
    }
};

TEST_F(LedDriver, LedsOffAfterCreate)
{
    uint16_t virtualleds1 = 0xffff;
    LedDriver_Create(&virtualleds1);
    ASSERT_EQ(0, virtualleds1);
}

TEST_F(LedDriver, TurnOnLedOne)
{
    LedDriver_TurnOn(1);
    ASSERT_EQ(1, virtualleds);
}

TEST_F(LedDriver, TurnOffLedOne)
{
    LedDriver_TurnOn(1);
    LedDriver_TurnOff(1);
    ASSERT_EQ(0, virtualleds);
}

CMake-Einstellungen.

CMakeLists.txt


project("led driver")

cmake_minimum_required(VERSION 2.8)

add_subdirectory(ext)
add_subdirectory(src)
add_subdirectory(test)

ADD_CUSTOM_TARGET(check test/led_driver_test_app)

src/CMakeLists.txt


add_library(LedDriver LedDriver.c)
target_include_directories(LedDriver PUBLIC ../inc)

test/CMakeLists.txt


add_executable(led_driver_test_app
    LedDriverTest.cpp)
target_link_libraries(led_driver_test_app
    gtest
    gtest_main
    LedDriver)

Dies ist ein Ausführungsbeispiel.

$ cd build
$ cmake ..
-- Configuring done
-- Generating done
-- Build files have been written to: /home/sekine/github/leddriver2/build
$ make
[ 25%] Built target gtest
[ 50%] Built target gtest_main
[ 75%] Built target LedDriver
[100%] Built target led_driver_test_app
$ make check
Running main() from gtest_main.cc
[==========] Running 3 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 3 tests from LedDriver
[ RUN      ] LedDriver.LedsOffAfterCreate
[       OK ] LedDriver.LedsOffAfterCreate (0 ms)
[ RUN      ] LedDriver.TurnOnLedOne
[       OK ] LedDriver.TurnOnLedOne (0 ms)
[ RUN      ] LedDriver.TurnOffLedOne
[       OK ] LedDriver.TurnOffLedOne (0 ms)
[----------] 3 tests from LedDriver (0 ms total)

[----------] Global test environment tear-down
[==========] 3 tests from 1 test case ran. (1 ms total)
[  PASSED  ] 3 tests.
Built target check
$

Recommended Posts

Ich habe versucht, Google Test und CMake in C zu verwenden
Ich habe versucht, die Docomo-Spracherkennungs-API und die Google Speech-API in Java zu verwenden
Ich habe versucht, die Zeit und die Zeit der C-Sprache zu veranschaulichen
Ich habe versucht, den Chi-Quadrat-Test in Python und Java zu programmieren.
Verwendung von Google Test in C-Sprache
Ich habe versucht, PyEZ und JSNAPy zu verwenden. Teil 2: Ich habe versucht, PyEZ zu verwenden
Ich habe versucht, die Bayes'sche Optimierung von Python zu verwenden
Ich habe versucht, den Google-Kalender mit CSV-Terminen mithilfe von Python und Google API zu aktualisieren
Ich habe versucht, PyEZ und JSNAPy zu verwenden. Teil 1: Übersicht
Ich habe versucht, Web-Scraping mit Python und Selen
Ich habe versucht, Objekte mit Python und OpenCV zu erkennen
Ich habe versucht, die Google Cloud Vision-API zu verwenden
Ich habe versucht, ein Python 3-Modul in C hinzuzufügen
Ich habe versucht, parametrisiert zu verwenden
Ich habe versucht, Argparse zu verwenden
Ich habe versucht, Mimesis zu verwenden
Ich habe versucht, anytree zu verwenden
Ich habe versucht, aiomysql zu verwenden
Ich habe versucht, Summpy zu verwenden
Ich habe versucht, Coturn zu verwenden
Ich habe versucht, Pipenv zu verwenden
Ich habe versucht, Matplotlib zu verwenden
Ich habe versucht, "Anvil" zu verwenden.
Ich habe versucht, Hubot zu verwenden
Ich habe versucht, ESPCN zu verwenden
Ich habe versucht, openpyxl zu verwenden
Ich habe versucht, Ipython zu verwenden
Ich habe versucht, PyCaret zu verwenden
Ich habe versucht, Cron zu verwenden
Ich habe versucht, ngrok zu verwenden
Ich habe versucht, face_recognition zu verwenden
Ich habe versucht, Jupyter zu verwenden
Ich habe versucht, doctest zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, jinja2 zu verwenden
Ich habe versucht, Folium zu verwenden
Ich habe versucht, das Zeitfenster zu verwenden
Ich habe versucht, Google Translate aus Python zu verwenden, und es war einfach zu einfach
Ich habe versucht, TradeWave zu verwenden (BitCoin-Systemhandel in Python)
Ich habe versucht, mit Python auf Google Spread Sheets zuzugreifen
[Ich habe versucht, Pythonista 3 zu verwenden] Einführung
Ich habe versucht, easydict (Memo) zu verwenden.
Ich habe versucht, das Gesicht mit Face ++ zu erkennen
Ich habe versucht, RandomForest zu verwenden
Ich habe versucht, BigQuery ML zu verwenden
Ich habe versucht, Amazon Glacier zu verwenden
Ich habe versucht, Git Inspector zu verwenden
Ich habe die C-Erweiterung von Python ausprobiert
Ich habe versucht, Magenta / TensorFlow zu verwenden
Ich habe versucht, AWS Chalice zu verwenden
Ich habe versucht, Slack Emojinator zu verwenden
Ich habe versucht, mit Python Modebilder und Textsätze zu [kratzen].
Ich habe versucht, die Informationen des Webs mit "Requests" und "lxml" abzurufen.
[Python Scraping] Ich habe versucht, Google Search Top10 mit Beautifulsoup & Selenium
Ich habe eine Klasse in Python erstellt und versucht, Enten zu tippen
Ich habe eine Stoppuhr mit tkinter mit Python gemacht
Ich habe versucht, Rotrics Dex Arm # 2 zu verwenden
Modultest mit mehreren Instanzen in C-Sprache