小さい頃はエラ呼吸

いつのまにやら肺で呼吸をしています。


サンプルプログラムから学ぶGoogleTestの致命的なアサーション

はじめに

GoogleTestのアサーションには、致命的なアサーションと致命的ではないアサーションという2つのアサーションがあります。言葉だけではぜんぜん意味がわからないので、実際に試してみました。

致命的なアサーションを使ったテスト

はじめに致命的なアサーションを使ったテストを実行してみます。

#include "stdafx.h"
#include <gtest/gtest.h>

int _tmain(int argc, _TCHAR* argv[])
{
  ::testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}

TEST(TestCaseName1, TestName1)
{
  ASSERT_TRUE(false);
  ASSERT_TRUE(false);
}

このテストを実行すると、最初のASSERT_TRUE(false);だけが実行され、2つめのASSERT_TRUE(false);が実行されません。このように、アサーションが失敗した場合に後続の処理を行わずに、関数の実行をストップさせるのが致命的なアサーションです。

致命的ではないアサーションを使ったテスト

つづいて、致命的なアサーションを使ったテストを実行してみます。

#include "stdafx.h"
#include <gtest/gtest.h>

int _tmain(int argc, _TCHAR* argv[])
{
  ::testing::InitGoogleTest(&argc, argv);
  return RUN_ALL_TESTS();
}

TEST(TestCaseName1, TestName1)
{
  EXPECT_TRUE(false);
  EXPECT_TRUE(false);
}

このテストを実行すると、最初のASSERT_TRUE(false);に失敗しても2つめのASSERT_TRUE(false);が実行されていることが確認できます。アサーションが失敗しても、以降の処理を継続するのが致命的ではないアサーションです。

まとめ

致命的なアサーションと致命的ではないアサーションの違いは、テストに失敗した場合に以降の処理をするかしないかの違いです。

現場の仕事がバリバリ進む ソフトウェアテスト手法
高橋 寿一 湯本 剛
技術評論社
売り上げランキング: 82791