nlib
testingライブラリの機能一覧

testingライブラリで定義されているマクロ等の一覧です。nn::nlib::testingの説明も御覧ください。 [詳解]

ファイル

ファイル  NTest.h
 基本的な単体テスト用マクロが定義されています。
 
ファイル  Pred.h
 述語アサーションが定義されています。
 
ファイル  ParamType.h
 型付けテストを定義しています。
 

マクロ定義

#define NLIB_TESTING_OSTREAM   ::nlib_ns::testing::detail_func::DummyStream
 testingライブラリにおいてstd::ostreamの代わりに利用されます。 [詳解]
 
#define FRIEND_TEST(test_case, test_name)   friend class NLIB_TESTING_CLASS_NAME_(test_case, test_name)
 テストコードがプライベートメンバにアクセスできるように記述します。 [詳解]
 

関数

AssertionResult nn::nlib::testing::FloatLE (const char *expr1, const char *expr2, float val1, float val2)
 val1 <= val2を検証します。[ASSERT|EXPECT]_PRED_FORMAT2に組み込んで利用します。 [詳解]
 
AssertionResult nn::nlib::testing::DoubleLE (const char *expr1, const char *expr2, double val1, double val2)
 val1 <= val2を検証します。[ASSERT|EXPECT]_PRED_FORMAT2に組み込んで利用します。 [詳解]
 

テスト関数の定義

#define TEST(test_case_name, specific_test_name)   NLIB_TEST_(test_case_name, specific_test_name, ::nlib_ns::testing::Test)
 テスト関数を定義します。 [詳解]
 
#define TEST_F(test_fixture_name, specific_test_name)   NLIB_TEST_(test_fixture_name, specific_test_name, test_fixture_name)
 テストフィクスチャを利用したテスト関数を定義します。 [詳解]
 

値をパラメータ化したテスト関数の定義

#define TEST_P(test_case, test_name)
 値をパラメータ化したテストを定義します。 [詳解]
 
#define INSTANTIATE_TEST_CASE_P(prefix, test_case, generator)
 テストにパラメータを与えます。 [詳解]
 

型をパラメータ化したテスト関数の定義

#define TYPED_TEST_CASE(test_case, types)   typedef types::type NLIB_TESTING_TYPELIST(test_case)
 型リストとテストケースを関連付けます。 [詳解]
 
#define TYPED_TEST(test_case, test_name)
 型付けテストを記述します。 [詳解]
 

テストの開始

#define RUN_ALL_TESTS()   ::nlib_ns::testing::TestInfo::Run()
 テストを開始します。 [詳解]
 

無条件の成功と失敗

#define SUCCEED()
 何もしません。
 
#define FAIL()
 無条件で失敗して現在実行中の関数から抜けます。
 

条件式のテスト(ASSERT_*)

#define ASSERT_TRUE(expr)   NLIB_TESTING_BOOLEAN_IMPL_(expr, true, false, NLIB_TESTING_FATAL_)
 conditiontrueであるかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_FALSE(expr)   NLIB_TESTING_BOOLEAN_IMPL_(!(expr), false, true, NLIB_TESTING_FATAL_)
 conditionfalseであるかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。
 

条件式のテスト(EXPECT_*)

#define EXPECT_TRUE(expr)   NLIB_TESTING_BOOLEAN_IMPL_(expr, true, false, NLIB_TESTING_NONFATAL_)
 ASSERT_TRUE()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_FALSE(expr)   NLIB_TESTING_BOOLEAN_IMPL_(!(expr), false, true, NLIB_TESTING_NONFATAL_)
 ASSERT_FALSE()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 

値のテスト(ASSERT_*)

#define ASSERT_EQ(expected, actual)   NLIB_TESTING_ASSERT_HELPER_(::nlib_ns::testing::CompEQ, expected, actual)
 expected == actual であるかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。 [詳解]
 
#define ASSERT_NE(expected, actual)   NLIB_TESTING_ASSERT_HELPER_(::nlib_ns::testing::CompNE, expected, actual)
 val1 != val2 であるかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_LT(val1, val2)   NLIB_TESTING_ASSERT_HELPER_(::nlib_ns::testing::CompLT, val1, val2)
 val1 < val2 であるかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_LE(val1, val2)   NLIB_TESTING_ASSERT_HELPER_(::nlib_ns::testing::CompLE, val1, val2)
 val1 <= val2 であるかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_GT(val1, val2)   NLIB_TESTING_ASSERT_HELPER_(::nlib_ns::testing::CompGT, val1, val2)
 val1 > val2 であるかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_GE(val1, val2)   NLIB_TESTING_ASSERT_HELPER_(::nlib_ns::testing::CompGE, val1, val2)
 val1 >= val2 であるかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_STREQ(expected, actual)   NLIB_TESTING_ASSERT_HELPER_(::nlib_ns::testing::CompStrEq, expected, actual)
 2つのC文字列が等しいかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_STRNE(expected, actual)   NLIB_TESTING_ASSERT_HELPER_(::nlib_ns::testing::CompStrNe, expected, actual)
 2つのC文字列が等しくないかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_STRCASEEQ(expected, actual)   NLIB_TESTING_ASSERT_HELPER_(::nlib_ns::testing::CompStrCaseEq, expected, actual)
 2つのC文字列が等しいかどうかをアルファベットの大文字小文字の違いを無視して検証します。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_STRCASENE(expected, actual)   NLIB_TESTING_ASSERT_HELPER_(::nlib_ns::testing::CompStrCaseNe, expected, actual)
 2つのC文字列が等しくないかどうかをアルファベットの大文字小文字の違いを無視して検証します。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_FLOAT_EQ(expected, actual)   NLIB_TESTING_ASSERT_HELPER_(::nlib_ns::testing::CompFloatEq, expected, actual)
 2つのfloat値がほぼ等しいかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。 [詳解]
 
#define ASSERT_DOUBLE_EQ(expected, actual)   NLIB_TESTING_ASSERT_HELPER_(::nlib_ns::testing::CompDoubleEq, expected, actual)
 2つのdouble値がほぼ等しいかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。 [詳解]
 
#define ASSERT_NEAR(val1, val2, abs_error)
 val1val2 の差がabs_error 以内に収まるかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。
 

値のテスト(EXPECT_*)

#define EXPECT_EQ(expected, actual)   NLIB_TESTING_EXPECT_HELPER_(::nlib_ns::testing::CompEQ, expected, actual)
 ASSERT_EQ()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_NE(expected, actual)   NLIB_TESTING_EXPECT_HELPER_(::nlib_ns::testing::CompNE, expected, actual)
 ASSERT_NE()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_LT(val1, val2)   NLIB_TESTING_EXPECT_HELPER_(::nlib_ns::testing::CompLT, val1, val2)
 ASSERT_LT()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_LE(val1, val2)   NLIB_TESTING_EXPECT_HELPER_(::nlib_ns::testing::CompLE, val1, val2)
 ASSERT_LT()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_GT(val1, val2)   NLIB_TESTING_EXPECT_HELPER_(::nlib_ns::testing::CompGT, val1, val2)
 ASSERT_GT()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_GE(val1, val2)   NLIB_TESTING_EXPECT_HELPER_(::nlib_ns::testing::CompGE, val1, val2)
 ASSERT_GE()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_STREQ(expected, actual)   NLIB_TESTING_EXPECT_HELPER_(::nlib_ns::testing::CompStrEq, expected, actual)
 ASSERT_STREQ()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_STRNE(expected, actual)   NLIB_TESTING_EXPECT_HELPER_(::nlib_ns::testing::CompStrNe, expected, actual)
 ASSERT_STRNE()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_STRCASEEQ(expected, actual)   NLIB_TESTING_EXPECT_HELPER_(::nlib_ns::testing::CompStrCaseEq, expected, actual)
 ASSERT_STRCASEEQ()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_STRCASENE(expected, actual)   NLIB_TESTING_EXPECT_HELPER_(::nlib_ns::testing::CompStrCaseNe, expected, actual)
 ASSERT_STRCASENE()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_FLOAT_EQ(expected, actual)   NLIB_TESTING_EXPECT_HELPER_(::nlib_ns::testing::CompFloatEq, expected, actual)
 ASSERT_FLOAT_EQ()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_DOUBLE_EQ(expected, actual)   NLIB_TESTING_EXPECT_HELPER_(::nlib_ns::testing::CompDoubleEq, expected, actual)
 ASSERT_DOUBLE_EQ()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_NEAR(val1, val2, abs_error)
 ASSERT_NEAR()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 

サブルーチンでのアサートを利用する場合に利用

#define SCOPED_TRACE(msg)
 失敗メッセージを表示する際にスコープの位置の手がかりとなるメッセージを追加します。 [詳解]
 
#define ASSERT_NO_FATAL_FAILURE(statement)
 サブルーチン(statement )内でASSERT_*が失敗していないかどうか検証します。失敗した場合は現在実行中の関数から抜けます。 [詳解]
 
#define EXPECT_NO_FATAL_FAILURE(statement)
 EXPECT_NO_FATAL_FAILURE()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 

既存のブール関数のテスト(ASSERT_PREDn)

bool型を返す関数がある場合、以下のマクロに与えることで失敗時に関数の引数を表示できます。

説明
以下が単純な例です。
bool IsEven(int n) { return n % 2 == 0; }
TEST(Pred, test) {
ASSERT_PRED1(IsEven, 1 + 2);
}
/*
Output:
[ RUN ] pred.test
IsEven(1 + 2) evaluates to false, where
1 + 2 evaluates to 3
[ FAILED ] pred.test (0 ms)
*/
#define ASSERT_PRED1(pred, v1)   NLIB_TESTING_PRED1_(pred, v1, NLIB_TESTING_FATAL_)
 pred(v1)が真であるかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_PRED2(pred, v1, v2)   NLIB_TESTING_PRED2_(pred, v1, v2, NLIB_TESTING_FATAL_)
 pred(v1, v2)が真であるかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_PRED3(pred, v1, v2, v3)   NLIB_TESTING_PRED3_(pred, v1, v2, v3, NLIB_TESTING_FATAL_)
 pred(v1, v2, v3)が真であるかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_PRED4(pred, v1, v2, v3, v4)   NLIB_TESTING_PRED4_(pred, v1, v2, v3, v4, NLIB_TESTING_FATAL_)
 pred(v1, v2, v3, v4)が真であるかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_PRED5(pred, v1, v2, v3, v4, v5)   NLIB_TESTING_PRED5_(pred, v1, v2, v3, v4, v5, NLIB_TESTING_FATAL_)
 pred(v1, v2, v3, v4, v5))が真であるかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。
 

既存のブール関数のテスト(EXPECT_PREDn)

bool型を返す関数がある場合、以下のマクロに与えることで失敗時に関数の引数を表示できます。

#define EXPECT_PRED1(pred, v1)   NLIB_TESTING_PRED1_(pred, v1, NLIB_TESTING_NONFATAL_)
 ASSERT_PRED1()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_PRED2(pred, v1, v2)   NLIB_TESTING_PRED2_(pred, v1, v2, NLIB_TESTING_NONFATAL_)
 ASSERT_PRED2()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_PRED3(pred, v1, v2, v3)   NLIB_TESTING_PRED3_(pred, v1, v2, v3, NLIB_TESTING_NONFATAL_)
 ASSERT_PRED3()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_PRED4(pred, v1, v2, v3, v4)   NLIB_TESTING_PRED4_(pred, v1, v2, v3, v4, NLIB_TESTING_NONFATAL_)
 ASSERT_PRED4()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 
#define EXPECT_PRED5(pred, v1, v2, v3, v4, v5)   NLIB_TESTING_PRED5_(pred, v1, v2, v3, v4, v5, NLIB_TESTING_NONFATAL_)
 ASSERT_PRED5()と同様ですが、失敗した場合でも現在実行中の関数から抜けません。
 

テスト専用ブール関数の定義による表示のカスタマイズ(ASSERT_PRED_FORMATn)

ASSERT_PREDn()において失敗した場合のメッセージをカスタマイズしたい場合は以下のマクロを使います。

説明
以下が単純な書き方の例で、AssertionResult型を返す関数を定義してASSERT_TRUE等でテストします。
::testing::AssertionResult IsEven(int n) {
if (n % 2 != 0)
return ::testing::AssertionFailure() << n << " is not even";
return ::testing::AssertionSuccess();
}
TEST(PredAssertionResult, test) {
ASSERT_TRUE(IsEven(1 + 2));
}
/*
Output:
[ RUN ] pred.test
Value of: IsEven(1 + 2)
Actual: false (3 is not even)
Expected: true
[ FAILED ] pred.test (0 ms)
*/
より詳細にカスタマイズしたい場合は、以下のようにASSERT_PREDn()を利用します。
::testing::AssertionResult IsEven(const char* n_expr, int n) {
if (n % 2 != 0)
return ::testing::AssertionFailure() << n_expr << " is not even";
return ::testing::AssertionSuccess();
}
TEST(PredFormat, test) {
ASSERT_PRED_FORMAT1(IsEven, (1 + 2));
}
/*
Output:
[ RUN ] PredFormat.test
(1 + 2) is not even
[ FAILED ] PredFormat.test (0 ms)
[----------] 1 tests from PredFormat (0 ms total)
*/
#define ASSERT_PRED_FORMAT1(pred_format, v1)   NLIB_TESTING_PRED_FORMAT1_(pred_format, v1, NLIB_TESTING_FATAL_)
 失敗した際の表示をユーザーが定義できるASSERT_PRED1()です。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_PRED_FORMAT2(pred_format, v1, v2)   NLIB_TESTING_PRED_FORMAT2_(pred_format, v1, v2, NLIB_TESTING_FATAL_)
 失敗した際の表示をユーザーが定義できるASSERT_PRED2()です。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_PRED_FORMAT3(pred_format, v1, v2, v3)   NLIB_TESTING_PRED_FORMAT3_(pred_format, v1, v2, v3, NLIB_TESTING_FATAL_)
 失敗した際の表示をユーザーが定義できるASSERT_PRED3()です。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_PRED_FORMAT4(pred_format, v1, v2, v3, v4)   NLIB_TESTING_PRED_FORMAT4_(pred_format, v1, v2, v3, v4, NLIB_TESTING_FATAL_)
 失敗した際の表示をユーザーが定義できるASSERT_PRED4()です。失敗した場合は現在実行中の関数から抜けます。
 
#define ASSERT_PRED_FORMAT5(pred_format, v1, v2, v3, v4, v5)   NLIB_TESTING_PRED_FORMAT5_(pred_format, v1, v2, v3, v4, v5, NLIB_TESTING_FATAL_)
 失敗した際の表示をユーザーが定義できるASSERT_PRED5()です。失敗した場合は現在実行中の関数から抜けます。
 

詳解

testingライブラリで定義されているマクロ等の一覧です。nn::nlib::testingの説明も御覧ください。

マクロ定義詳解

◆ ASSERT_DOUBLE_EQ

#define ASSERT_DOUBLE_EQ (   expected,
  actual 
)    NLIB_TESTING_ASSERT_HELPER_(::nlib_ns::testing::CompDoubleEq, expected, actual)

2つのdouble値がほぼ等しいかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。

説明
64ビットの値としてみた場合、プラスマイナス4以内の差に収まっている場合は等しいとされます。 例えば、0との比較をした場合、おおよそプラスマイナス2e-323f以内の差であれば等しいとされます。
浮動小数の特性上、値の絶対値が大きいほど等しいとされる値の幅は大きくなります。 また、NaN同士は等しくないとされます。NaNは指数部が全て1であり、仮数部がゼロではない値です。

NTest.h509 行目に定義があります。

◆ ASSERT_EQ

#define ASSERT_EQ (   expected,
  actual 
)    NLIB_TESTING_ASSERT_HELPER_(::nlib_ns::testing::CompEQ, expected, actual)

expected == actual であるかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。

説明
NULLとの比較には用いることができません。ASSERT_TRUE(NULL == actual) と書く必要があります。
各種例:
testing/failure/failure.cpp, testing/param_type/param_type.cpp.

NTest.h465 行目に定義があります。

◆ ASSERT_FLOAT_EQ

#define ASSERT_FLOAT_EQ (   expected,
  actual 
)    NLIB_TESTING_ASSERT_HELPER_(::nlib_ns::testing::CompFloatEq, expected, actual)

2つのfloat値がほぼ等しいかどうかを検証します。失敗した場合は現在実行中の関数から抜けます。

説明
32ビットの値としてみた場合、プラスマイナス4以内の差に収まっている場合は等しいとされます。 例えば、0との比較をした場合、おおよそプラスマイナス6e-45f以内の差であれば等しいとされます。
浮動小数の特性上、値の絶対値が大きいほど等しいとされる値の幅は大きくなります。 また、NaN同士は等しくないとされます。NaNは指数部が全て1であり、仮数部がゼロではない値です。

NTest.h507 行目に定義があります。

◆ ASSERT_NO_FATAL_FAILURE

#define ASSERT_NO_FATAL_FAILURE (   statement)
値:
switch (0) \
case 0: \
default: \
for (;;) { \
statement; \
break; \
} \
if (!::nlib_ns::testing::UnitTest::GetInstance() \
->current_test_info() \
->result() \
->HasFatalFaiulre()) \
; \
else \
NLIB_TESTING_FATAL_ = ::nlib_ns::testing::AssertionResult(false) \
<< "Expected: " #statement \
" doesn't generate new fatal failures.\n" \
" Actual: it does.\n"

サブルーチン(statement )内でASSERT_*が失敗していないかどうか検証します。失敗した場合は現在実行中の関数から抜けます。

説明
サブルーチン内でASSERT_*が失敗した場合、サブルーチンから戻った後もテストが続行されます。 このような挙動を望まない場合に、このマクロを利用します。
各種例:
testing/success/success.cpp.

NTest.h545 行目に定義があります。

◆ FRIEND_TEST

#define FRIEND_TEST (   test_case,
  test_name 
)    friend class NLIB_TESTING_CLASS_NAME_(test_case, test_name)

テストコードがプライベートメンバにアクセスできるように記述します。

説明
テストコードからアクセスする必要があるクラス定義内にこのマクロを記述します。 マクロはテストコードが属するクラスへのフレンド宣言を行なっています。

NTest.h450 行目に定義があります。

◆ INSTANTIATE_TEST_CASE_P

#define INSTANTIATE_TEST_CASE_P (   prefix,
  test_case,
  generator 
)
値:
class TestParamAdder_##test_case##prefix : public ::nlib_ns::testing::TestParamAdderBase { \
public: \
TestParamAdder_##test_case##prefix() { \
::nlib_ns::testing::TestParamAdderList::AddTestParamAdder(this); \
} \
virtual void AddParams() { (generator).Gen(test_case::GetParams()); } \
} ntest_##test_case##prefix##_glbval_

テストにパラメータを与えます。

説明
詳細は、TEST_P()マクロの解説をお読みください。
各種例:
testing/param_value/param_value.cpp.

ParamValue.h206 行目に定義があります。

◆ NLIB_TESTING_OSTREAM

#define NLIB_TESTING_OSTREAM   ::nlib_ns::testing::detail_func::DummyStream

testingライブラリにおいてstd::ostreamの代わりに利用されます。

説明
testingライブラリでは、std::ostreamを利用せずに独自に代替物を定義しています。 従ってこの部分でGoogle Testとの互換性が失われますが、このマクロを利用することでoperator<< のオーバーロードやPrintTo()関数を定義するコードをGoogle Testのものと同じにすることができます。
NLIB_USE_GTESTマクロを定義してGoogle Testを利用する場合、std::ostreamとなります。
各種例:
testing/failure/failure.cpp, testing/param_type/param_type.cpp.

testing.h37 行目に定義があります。

◆ RUN_ALL_TESTS

#define RUN_ALL_TESTS ( )    ::nlib_ns::testing::TestInfo::Run()

テストを開始します。

説明
0を返した場合は全てのテストが成功していて、通常テストプログラムのメイン関数の戻り値として利用します。
以下がテストプログラムの典型的なmain()関数の例です。
int main(int argc, char** argv) {
::testing::InitNintendoTest(&argc, argv); // ::testing::InitGoogleTest(&argc, argv)
return RUN_ALL_TESTS()
}
各種例:
testing/failure/failure.cpp, testing/param_type/param_type.cpp, testing/param_value/param_value.cpp, testing/success/success.cpp.

NTest.h453 行目に定義があります。

◆ SCOPED_TRACE

#define SCOPED_TRACE (   msg)
値:
::nlib_ns::testing::ScopedTrace NLIB_TESTING_CONCAT_TOKEN_(nlib_scopedtrace_, __LINE__)( \
::nlib_ns::testing::AssertionResult(true) << (msg), __FILE__, __LINE__)

失敗メッセージを表示する際にスコープの位置の手がかりとなるメッセージを追加します。

説明
テストコードがサブルーチンに記述されていて、複数の場所から呼び出される場合、内部でテストに失敗したときどの呼び出しからの失敗か特定するのが難しくなります。
呼び出し側のコードにSCOPED_TRACE()を追加することで、失敗した場合にSCOPED_TRACE()が記述されたファイル名と行数及びメッセージが失敗メッセージに追加されます。 効果はSCOPED_TRACE()が記述されたスコープを抜けることで解除されます。
各種例:
testing/failure/failure.cpp.

NTest.h541 行目に定義があります。

◆ TEST

#define TEST (   test_case_name,
  specific_test_name 
)    NLIB_TEST_(test_case_name, specific_test_name, ::nlib_ns::testing::Test)

テスト関数を定義します。

説明
TESTマクロを利用したテストの作成方法
  1. 第1引数にテストのグループ名、第2引数にテスト名を指定します。
  2. テスト関数は値を返さないC++(メンバ)関数です。
  3. 関数内にC++のコードを自由に書くことができます。ここで各種アサーションを利用して値を検証することができます。
  4. アサーションのどれか1つでも失敗した場合はテストが失敗したことになります。
  5. なお、テスト関数は自動的に登録されます。
具体的には以下のような記述をすることになります。
namespace test {
int Factorial(int n) {
if (n == 0) return 1;
return n * Factorial(n - 1);
}
TEST(FactorialTest, Zero) {
EXPECT_EQ(1, Factorial(0));
}
TEST(FactorialTest, Positive) {
EXPECT_EQ(1, Factorial(1));
EXPECT_EQ(2, Factorial(2));
EXPECT_EQ(6, Factorial(3));
EXPECT_EQ(40320, Factorial(8));
}
各種例:
testing/failure/failure.cpp, testing/success/success.cpp.

NTest.h445 行目に定義があります。

◆ TEST_F

#define TEST_F (   test_fixture_name,
  specific_test_name 
)    NLIB_TEST_(test_fixture_name, specific_test_name, test_fixture_name)

テストフィクスチャを利用したテスト関数を定義します。

説明
同様のデータをセットアップする必要があるテストを書く場合、テストフィクスチャを利用することでテストで利用する各種オブジェクトの設定を何度も書かずに済ますことができます。
テストフィクスチャの作成方法
  1. 基底クラス Test を継承したクラスを作ります。
  2. staticメンバ関数として、void SetUpTestCase()メンバ関数とvoid TearDownTestCase()メンバ関数を定義します。それぞれ、テストケース全体の直前と直後に実行されます。
  3. protectedvoid SetUp()メンバ関数とvoid TearDown()メンバ関数を定義します。それぞれ、テストの直前と直後に実行されます。
  4. データメンバとして必要なデータを定義することができます。
  5. サブルーチンが必要な場合はメンバ関数として記述することができます。
テストフィクスチャは以下の様なコードになります。
class MyTest : public ::testing::Test {
protected:
static void SetUpTestCase() { nlib_printf("SetUpTestCase called\n"); }
static void TearDownTestCase() { nlib_printf("TearDownTestCase called\n"); }
void SetUp() override { nlib_printf("SetUp called\n"); }
void TearDown() override { nlib_printf("TearDown called\n"); }
// You can add the member functions or the data members for MyTest
};
TEST_F(MyTest, test1) {
nlib_printf("MyTest::test1\n");
// Write your test
}
TEST_F(MyTest, test2) {
nlib_printf("MyTest::test2\n");
// Write your test
}
/*
Output:
SetUpTestCase called
[ RUN ] MyTest.test1
SetUp called
MyTest::test1
TearDown called
[ OK ] MyTest.test1 (0 ms)
[ RUN ] MyTest.test2
SetUp called
MyTest::test2
TearDown called
[ OK ] MyTest.test2 (0 ms)
TearDownTestCase called
[----------] 2 tests from MyTest (1 ms total)
*/
各種例:
testing/success/success.cpp.

NTest.h447 行目に定義があります。

◆ TEST_P

#define TEST_P (   test_case,
  test_name 
)
値:
class NLIB_TESTING_CLASS_NAME_(test_case, test_name) : public test_case { \
public: \
NLIB_TESTING_CLASS_NAME_(test_case, test_name)() {} \
\
private: \
virtual void TestBodySub(); \
static ::nlib_ns::testing::TestInfo* info_; \
NLIB_DISALLOW_COPY_AND_ASSIGN(NLIB_TESTING_CLASS_NAME_(test_case, test_name)); \
}; \
::nlib_ns::testing::TestInfo* NLIB_TESTING_CLASS_NAME_(test_case, test_name)::info_ = \
::nlib_ns::testing::TestInfo::AddTestInfo<NLIB_TESTING_CLASS_NAME_(test_case, test_name)>( \
#test_case, #test_name, -1, test_case::SetUpTestCase, test_case::TearDownTestCase); \
void NLIB_TESTING_CLASS_NAME_(test_case, test_name)::TestBodySub()
共通して使われることの多いストリーム関連のクラス群や各種コンテナ、及びガシェットクラスが実装されてい...
Definition: Base64.h:25

値をパラメータ化したテストを定義します。

説明
関数のパラメータとしていろいろな値を与えてテストしたい場合がしばしばあります。 テスト内にパラメータをいくつも記述するという方法もありますが、TEST_P()マクロを使うとテスト本体と入力値を分けて記述することが可能になります。
値をパラメータ化したテストを記述する場合、以下の記述を行う必要があります。
  • nn::nlib::testing::TestWithParam<T>を継承して、フィクスチャクラスを定義します。ここでTはパラメータの型です。
  • テスト本体はTEST_P()マクロを利用して記述します。パラメータはGetParam()関数で取得できます。 内部で致命的な失敗(ASSERT_*マクロの失敗)をした場合には、後続のパラメータはテストされないことに注意してください。
  • パラメータは、INSTANCE_TEST_CASE_P()マクロを利用して記述します。
具体的には以下のようなコードを記述をすることになります。
bool IsEven(int n) { return n % 2 == 0; }
class ParamTestInt : public ::testing::TestWithParam<int> {
protected:
static void SetUpTestCase() { nlib_printf("SetUpTestCase called\n"); }
static void TearDownTestCase() { nlib_printf("TearDownTestCase called\n"); }
void SetUp() override {}
void TearDown() override {}
// You can add the member functions or the data members for ParamTestInt
};
TEST_P(ParamTestInt, IsEven) {
int n = GetParam(); // returns int because ParamTestInt derives from TestWithParam<int>
nlib_printf("IsEven(%d)\n", n);
ASSERT_TRUE(IsEven(n));
}
UseRange, // Name
ParamTestInt, // Test Case
::testing::Range(0, 100, 10) // The values retrieved by GetParam(first, last, step)
);
UseValues, // Name
ParamTestInt, // Test Case
::testing::Values(0, 2, 4, 6, 8) // Specify the values directly
);
int values[] = { 12, 14, 16, 18 };
UseValuesIn, // Name
ParamTestInt, // Test Case
::testing::ValuesIn(values) // Specify the container
);
/*
Output:
SetUpTestCase called
[ RUN ] ParamTestInt.IsEven
IsEven(0)
IsEven(10)
IsEven(20)
IsEven(30)
IsEven(40)
IsEven(50)
IsEven(60)
IsEven(70)
IsEven(80)
IsEven(90)
IsEven(0)
IsEven(2)
IsEven(4)
IsEven(6)
IsEven(8)
IsEven(12)
IsEven(14)
IsEven(16)
IsEven(18)
[ OK ] ParamTestInt.IsEven (2 ms)
TearDownTestCase called
*/
以下に各種パラメータジェネレータについて説明しておきます。
::testing::Range(begin, end[, step])
{begin, begin+step, begin+step+step, ...}という値を生成します。end は含まれません。 step のデフォルト値は1となります。
::testing::Values(v1, v2, ..., vN)
{v1, v2, ..., vN}という値を生成します。現在の実装ではN は10以下の場合がサポートされています。
::testing::ValuesIn(container)
配列とSTLのコンテナで表される値のリストを作成します。
::testing::ValuesIn(begin, end)
範囲[begin, end)で表される値を生成します。
::testing::Bool()
{false, true}という値を生成します。
各種例:
testing/param_value/param_value.cpp.

ParamValue.h191 行目に定義があります。

◆ TYPED_TEST

#define TYPED_TEST (   test_case,
  test_name 
)
値:
template<class T> \
class NLIB_TESTING_CLASS_NAME_(test_case, test_name) : public test_case<T> { \
public: \
typedef test_case<T> TestFixture; \
typedef T TypeParam; \
NLIB_TESTING_CLASS_NAME_(test_case, test_name)() {} \
\
private: \
virtual void TestBody(); \
NLIB_DISALLOW_COPY_AND_ASSIGN(NLIB_TESTING_CLASS_NAME_(test_case, test_name)); \
}; \
bool ntest_typed_test_##test_case##test_name##_ = \
::nlib_ns::testing::TypedTestLoop<NLIB_TESTING_CLASS_NAME_(test_case, test_name), \
NLIB_TESTING_TYPELIST( \
test_case)>::AddTestInfo(#test_case, #test_name, 1); \
template<class T> \
void NLIB_TESTING_CLASS_NAME_(test_case, test_name)<T>::TestBody()

型付けテストを記述します。

説明
詳細はTYPED_TEST_CASE()マクロの解説をお読みください。
各種例:
testing/param_type/param_type.cpp.

ParamType.h61 行目に定義があります。

◆ TYPED_TEST_CASE

#define TYPED_TEST_CASE (   test_case,
  types 
)    typedef types::type NLIB_TESTING_TYPELIST(test_case)

型リストとテストケースを関連付けます。

説明
クラステンプレートをいろいろな型で実体化した場合の動作をテストしたい場合があります。 それぞれの型に対してテストを記述することもできますが、面倒なので型付けリストを利用する方がベターです。
型付けテストを記述する場合、以下の記述を行う必要があります。
  • %:%:testing%:%:Test<T>を継承して、フィクスチャクラスを定義します。ここでTはパラメータの型です。
  • 型リストを定義します。型リストを定義するためのクラスが用意されているのでそれを利用(typedef)します。
  • TYPED_TEST_CASE()マクロを利用して最初に定義したフィクスチャクラスを関連付けます。
  • 最後にTYPED_TEST()マクロを利用してテストを定義します。
具体的には以下のようなコードを記述をすることになります。
template<class T>
class IsIntegralTest : public testing::Test {
public: // they must be public
static void SetUpTestCase() { nlib_printf("SetUpTestCase called\n"); }
static void TearDownTestCase() { nlib_printf("TearDownTestCase called\n"); }
protected:
void SetUp() override {}
void TearDown() override {}
// You can add the member functions or the data members for IsIntegralTest
};
typedef ::testing::Types<int, long, long long, char, int16_t> TestTypes;
TYPED_TEST_CASE(IsIntegralTest, TestTypes);
TYPED_TEST(IsIntegralTest, test) {
ASSERT_TRUE(std::is_integral<TypeParam>::value);
}
/*
Output:
TearDownTestCase called
[----------] 1 tests from ParamTestInt (5 ms total)
SetUpTestCase called
[ RUN ] IsIntegralTest.test.1
[ OK ] IsIntegralTest.test.1 (0 ms)
TearDownTestCase called
[----------] 1 tests from IsIntegralTest (1 ms total)
SetUpTestCase called
[ RUN ] IsIntegralTest.test.2
[ OK ] IsIntegralTest.test.2 (0 ms)
TearDownTestCase called
[----------] 1 tests from IsIntegralTest (1 ms total)
SetUpTestCase called
[ RUN ] IsIntegralTest.test.3
[ OK ] IsIntegralTest.test.3 (0 ms)
TearDownTestCase called
[----------] 1 tests from IsIntegralTest (1 ms total)
SetUpTestCase called
[ RUN ] IsIntegralTest.test.4
[ OK ] IsIntegralTest.test.4 (0 ms)
TearDownTestCase called
[----------] 1 tests from IsIntegralTest (1 ms total)
SetUpTestCase called
[ RUN ] IsIntegralTest.test.5
[ OK ] IsIntegralTest.test.5 (0 ms)
TearDownTestCase called
[----------] 1 tests from IsIntegralTest (1 ms total)
*/
各種例:
testing/param_type/param_type.cpp.

ParamType.h59 行目に定義があります。

関数詳解

◆ DoubleLE()

nn::nlib::testing::DoubleLE ( const char *  expr1,
const char *  expr2,
double  val1,
double  val2 
)

val1 <= val2を検証します。[ASSERT|EXPECT]_PRED_FORMAT2に組み込んで利用します。

引数
[in]expr1val1 を文字列にしたもの
[in]expr2val2 を文字列にしたもの
[in]val1double型の値
[in]val2double型の値
戻り値
AssertionResult型のオブジェクト
説明
通常のdouble型の比較と異なる点は、val1val2 がほぼ等しい場合はテストに成功することです。 基準はASSERT_DOUBLE_EQ()と一緒です。

◆ FloatLE()

nn::nlib::testing::FloatLE ( const char *  expr1,
const char *  expr2,
float  val1,
float  val2 
)

val1 <= val2を検証します。[ASSERT|EXPECT]_PRED_FORMAT2に組み込んで利用します。

引数
[in]expr1val1 を文字列にしたもの
[in]expr2val2 を文字列にしたもの
[in]val1float型の値
[in]val2float型の値
戻り値
AssertionResult型のオブジェクト
説明
通常のfloat型の比較と異なる点は、val1val2 がほぼ等しい場合はテストに成功することです。 基準はASSERT_FLOAT_EQ()と一緒です。