Google TestFixturesがどのように機能するかを理解しようとしています。
次のコードがあるとします。
class PhraseTest : public ::testing::Test
{
protected:
virtual void SetUp()
{
phraseClass * myPhrase1 = new createPhrase("1234567890");
phraseClass * myPhrase2 = new createPhrase("1234567890");
}
virtual void TearDown()
{
delete *myPhrase1;
delete *myPhrase2;
}
};
TEST_F(PhraseTest, OperatorTest)
{
ASSERT_TRUE(*myPhrase1 == *myPhrase2);
}
コンパイルすると、「myPhrase1」と「myPhrase2」がTEST_Fで宣言されていないというのはなぜですか?
myPhrase1
およびmyPhrase2
は、テストフィクスチャではなく、セットアップメソッドに対してローカルです。
あなたが欲しかったのは:
class PhraseTest : public ::testing::Test
{
protected:
phraseClass * myPhrase1;
phraseClass * myPhrase2;
virtual void SetUp()
{
myPhrase1 = new createPhrase("1234567890");
myPhrase2 = new createPhrase("1234567890");
}
virtual void TearDown()
{
delete myPhrase1;
delete myPhrase2;
}
};
TEST_F(PhraseTest, OperatorTest)
{
ASSERT_TRUE(*myPhrase1 == *myPhrase2);
}
myPhrase1
およびmyPhrase2
は、SetUp
関数でローカル変数として宣言されています。それらをクラスのメンバーとして宣言する必要があります。
class PhraseTest : public ::testing::Test
{
protected:
virtual void SetUp()
{
myPhrase1 = new createPhrase("1234567890");
myPhrase2 = new createPhrase("1234567890");
}
virtual void TearDown()
{
delete *myPhrase1;
delete *myPhrase2;
}
phraseClass* myPhrase1;
phraseClass* myPhrase2;
};
TEST_F(PhraseTest, OperatorTest)
{
ASSERT_TRUE(*myPhrase1 == *myPhrase2);
}