IUTEST(Hoge, ThrowValue)
{
IUTEST_ASSERT_THROW_VALUE_EQ(throw 2, int, 2);
IUTEST_ASSERT_THROW_VALUE_STREQ(throw "error", const char *, "error");
}
int ReturnTest(void)
{
IUTEST_ASSERT_TRUE(true) << ::iutest::AssertionReturn<int>(-1);
return 0;
}
IUTEST(Hoge, Inform)
{
IUTEST_INFORM_TRUE(IsEven(2));
}
IUTEST(Hoge, Size)
{
IUTEST_ASSUME_EQ(4, sizeof(int));
}
IUTTEST(NullCheck, Sample)
{
int* p = (int*)malloc(4);
IUTEST_ASSERT_TRUE(p != NULL);
__analysis_assume(p != NULL);
*p = 1;
IUTEST_ASSERT_EQ(1, *p);
}
IUTEST(NullCheck, Sample)
{
int* p = (int*)malloc(4);
IUTEST_ASSERT_NOTNULL(p);
*p = 1;
IUTEST_ASSERT_EQ(1, *p);
}
int f() { return 42; }
IUTEST(Test, Sample)
{
IUTEST_ASSERT_EQ( 42, f() );
IUTEST_ASSERT_TRUE( f() == 42 );
IUTEST_ASSERT( f() == 42 );
IUTEST_ASSERT_LE( f(), 0 );
IUTEST_ASSERT_TRUE( f() <= 0 );
IUTEST_ASSERT( f() <= 0 );
}
IUTEST(Test, Sample)
{
IUTEST_ASSERT(f() <= 0 IUTEST_OPERAND(||) f() >= 100 );
}
IUTEST(Test, Sample)
{
IUTEST_ASSERT(f() <= 0 || IUTEST_EXPRESSION(f() >= 100) );
IUTEST_ASSERT(IUTEST_EXPRESSION(f() <= 0) || IUTEST_EXPRESSION(f() >= 100) );
IUTEST_ASSERT_TRUE(IUTEST_EXPRESSION(f() <= 0) || IUTEST_EXPRESSION(f() >= 100) );
}
void TestFunction(int x, int y)
{
IUTEST_ASSERT_EQ(x, y);
}
IUTEST_PMZ(ParamMethodTest, EQ, TestFunction, 0, 0);
IUTEST_PMZ(ParamMethodTest, EQ, TestFunction, 1, 1);
//class AnyParamtest : public ::iutest::TestWithParam<int> {}; // 不要
IUTEST_P(AnyParamTest, Test)
{
const int value = GetParam<int>();
IUTEST_ASSERT_EQ(0, value);
}
IUTEST_INSTANTIATE_TEST_CASE_P(My1, AnyParamTest, ::iutest::Values(0));
IUTEST_INSTANTIATE_TEST_CASE_P(A, TestP
, ::iutest::Pairwise( ::iutest::Bool()
, ::iutest::Values(1, 2)
, ::iutest::Values(10, 11) ) );
IUTEST_INSTANTIATE_TEST_CASE_P(A, TestP
, ::iutest::RandomValues( 5 ) );
bool Filter(int n) { return n != 100 && n != 500 && n != 1000; }
IUTEST_INSTANTIATE_TEST_CASE_P(A, TestP
, ::iutest::ValuesGen( 5, ::iutest::RandomGenerator<int>(&Filter) ) );
IUTEST_INSTANTIATE_TEST_CASE_P(A1, TestP
, ::iutest::Concat( ::iutest::Range(1, 10), ::iutest::Range(101, 110) ) );
IUTEST_INSTANTIATE_TEST_CASE_P(A2, TestP
, ::iutest::Concat( ::iutest::Range(1, 10), ::iutest::Bool() ) );
IUTEST_INSTANTIATE_TEST_CASE_P(A1, TestP
, ::iutest::Range(1, 10)
+ ::iutest::Range(101, 110) );
IUTEST_INSTANTIATE_TEST_CASE_P(A2, TestP
, ::iutest::Range(1, 10)
+ ::iutest::Bool()
+ ::iutest::Values(99, 88, 77) ) );
IUTEST_PACKAGE(TestPackageA)
{
IUTEST(Test, Hoge)
{
IUTEST_ASSERT_TRUE(true);
}
}
IUTEST_PACKAGE(TestPackageB)
{
IUTEST(Test, Hoge)
{
IUTEST_ASSERT_TRUE(true);
}
}
IUTEST(IUTEST_JAPANESE_NAME(あいうえお)
, IUTEST_JAPANESE_NAME(かきくけこ))
{
}
class FixedTest : public ::iutest::Test {};
IUTEST_F(IUTEST_JAPANESE_NAME_F(FixedTest, あいうえお)
, IUTEST_JAPANESE_NAME(かきくけこ))
{
}
IUTEST(SkipTest, Skip)
{
if(sizeof(int) != 4 ) IUTEST_SKIP() << "sizeof(int) != 4";
}
class Hoge
{
int m_x;
int GetX() { return m_x; }
};
IUTEST_MAKE_PEEP(int Hoge::*, Hoge, m_x);
IUTEST_MAKE_PEEP(int (Hoge::*)(), Hoge, GetX);
IUTEST(ProdTest, Peep)
{
Hoge hoge;
IUTEST_PEEP_GET(hoge, Hoge, m_x) = 4;
IUTEST_ASSERT_EQ(4, IUTEST_PEEP_GET(hoge, Hoge, m_x));
IUTEST_ASSERT_EQ(4, IUTEST_PEEP_GET(hoge, Hoge, GetX)());
IUTEST_PEEP(Hoge, m_x) hoge_x(&hoge);
hoge_x = 5;
IUTEST_ASSERT_EQ(5, hoge_x);
}
//#include "iutest.hpp" #include "gtest/iutest_switch.hpp" // iutest.hpp の代わりに iutest_switch.hpp を使用する
フィルタのフォーマットは、':' で区切られたワイルドカードパターン(ポジティブパターン)になります。
また、先頭に '-' を付けることで、マッチしたテストを除外するネガティブパターンも指定できます。
(iutest のテスト名は、TestCaseName.TestName です)
| * | 任意の文字列にマッチ |
| ? | 任意の1文字にマッチ |
| ./foo_test | 全てのテストを実行します |
| ./foo_test --iutest_filter=* | |
| ./foo_test --iutest_filter=FooTest.* | テストケース FooTest 内のテストを全て実行します |
| ./foo_test --iutest_filter=*Null*:*Init* | 名前に "Null" または "Init" を含むテストを実行します |
| ./foo_test --iutest_filter=-*Foo* | 名前に "Foo" を含むテスト 以外 を全て実行します |
| ./foo_test --iutest_filter=FooTest.*:-FooTest.Bar | テストケース FooTest 内のテストで FooTest.Bar を除く 全てのテストを実行します |
| ./foo_test --iutest_filter=FooTest.*:-FooTest.Bar:-FooTest.Baz | テストケース FooTest 内のテストで FooTest.Bar と FooTest.Baz を除く全てのテストを実行します |
iutest ではフィルターをファイルから読み込むことができます。
--iutest_filter=@filter.txt のように先頭に @ を付け、その後にファイル名を指定することで読み込みできます。
フォーマットはコマンドラインと同じです。(改行は ':' に置き換えられます)
iutest では Matcher を提供しています。iutest の Matcher は Google Mock のそれとほぼ同じ使い方をします。
ただし、Google Mock との互換性対応はしていませんのでご注意ください。
Matcher は IUTEST_*_THAT アサーションで利用します。
| IUTEST_*_THAT(expression, m) | expression の値が Mathcer m にマッチするか検証します |