👌
【C 言語】ソースファイルの分割とユニットテスト
add という名前の関数を別のソースファイルで定義して読み込む練習をする。
main.c
#include <stdio.h>
#include "add.h"
int main() {
printf("%d\n", add(1, 2));
return 0;
}
add.h
#ifndef _ADD_H_
#define _ADD_H_
int add(int a, int b);
#endif // _ADD_H_
add.c
#include "add.h"
int add(int a, int b) {
return a + b;
}
コンパイルと実行は次のとおり
zig run main.c add.c -lc
clang main.c add.c -o main
./main
続いて add
のユニットテストを追加する。ヘッダーファイルだけの Acutest を使う。次のコマンドでダウンロードする
wget https://raw.githubusercontent.com/mity/acutest/master/include/acutest.h
次に test_add.c
を追加する
test_add.c
#include "add.h"
#include "acutest.h"
void test_add() {
TEST_ASSERT(add(1, 2) == 3);
}
TEST_LIST = {
{ "add", test_add },
{ NULL, NULL }
};
次に CMakeLists.txt を用意する
CMakeLists.txt
cmake_minimum_required(VERSION 3.10)
project(main)
add_executable(${PROJECT_NAME} main.c add.c)
enable_testing()
add_executable(test_add test_add.c add.c)
add_test(NAME run_test COMMAND test_add)
ビルドしてテストを実行する。make test
の代わりに ctest
を使うこともできる
mkdir build
cd build
cmake ..
make -j $(nproc)
make test
Running tests...
Test project /home/masakielastic/c-project/build
Start 1: run_test
1/1 Test #1: run_test ......................... Passed 0.00 sec
100% tests passed, 0 tests failed out of 1
Total Test time (real) = 0.00 sec
Discussion