Bitcoin Core ではBoost.test をつかって単体テストを記述しているので、その使い方について理解したい。
学習のためのリソースは以下を参考にする
Bitcoin Core の単体テスト
src/test/xxxxx_tests.cpp というファイルが、テスト対象のモジュールごとにあります。新しくテストを追加する際の、最も基本的な構造は以下のような感じです。
例えば src/chainparams.h のためのテストケースを書くファイルは次のように作れます。
code:src/test/chainparams_tests.cpp
#include <chainparams.h> // ← テストしたいモジュールのヘッダファイル #include <test/test_bitcoin.h> // ← テスト用のユーティリティ #include <boost/test/unit_test.hpp> // ← Boost.test を読み込み // テストスイートの名称(ここではchainparams_tests)の定義と、の前処理を指定しています。
// ここでは最も基本的な前処理である BasicTestingSetup を指定しています。これは test/test_bitcoin.h
// で定義されています。他にもありますが、これは今後で解説します(たぶん)
BOOST_FIXTURE_TEST_SUITE(chainparams_tests, BasicTestingSetup)
// ここから BOOST_AUTO_TEST_CASE マクロを使って実際にテストケースを記述します。
BOOST_AUTO_TEST_CASE(parse_pubkey_string)
{
BOOST_CHECK_EQUAL(1, 1);
}
BOOST_AUTO_TEST_SUITE_END()
ファイルを追加したら、src/Makefile.test.include に追加したファイルのパスを加えます。テストファイルのリストが書いてある箇所がああるので、その末尾あたりに追加しておきます。
code:src/Makefile.test.include
# ... 略
# test_bitcoin binary #
BITCOIN_TESTS =\
test/arith_uint256_tests.cpp \
# ... 略
test/versionbits_tests.cpp \
test/chainparams_tests.cpp # ←追加
# ... 略
さて、テストを実行してみます。実行は以下のコマンドで行います。
code:shell
$ make check
コンパイルとテストケースの実行が行われますが、詳細なログはでません 。以下のようにテストスイートの名称とログレベルを指定してテストを実行することで、指定したモジュールの詳細なログを確認することができます。
code:shell
$ src/test/test_bitcoin --log_level=all --run_test=chainparams_tests
Running 1 test case...
Entering test module "Bitcoin Test Suite"
test/chainparams_tests.cpp:10: Entering test suite "chainparams_tests"
test/chainparams_tests.cpp:13: Entering test case "parse_pubkey_string"
test/chainparams_tests.cpp:15: info: check 1 == 1 has passed
test/chainparams_tests.cpp:13: Leaving test case "parse_pubkey_string"; testing time: 26175us
test/chainparams_tests.cpp:10: Leaving test suite "chainparams_tests"; testing time: 26199us
Leaving test module "Bitcoin Test Suite"; testing time: 26319us
*** No errors detected
テスト書くのたっのしー!