2

このテストで列挙したすべての等式をテストしているのか、それとも最初のものだけをテストしているのか疑問に思います。

class SomethingTest : public testing::Test
{
public:
    SomethingTest() { }
    virtual ~SomethingTest() { }
};

      TEST_F(SomethingTest, Score)
    {
        Computer computer;
        FourInARowStrategy* strategy = new FourInARowStrategy();

        vector<vector<int>> brd;
        for(int i=0; i<6 ;i++)
        {
            vector<int> row ;
            for(int j=0;j<7;j++)
               row.push_back(0);
            brd.push_back(row);
         }

         brd[5][5]=1;
         brd[5][4]=2;
         brd[5][3]=1;
         brd[5][2]=1;
         brd[5][1]=1;
         brd[4][5]=2;
         brd[4][4]=2;
         brd[4][3]=1;
         brd[4][2]=1;
         brd[3][2]=2;
         brd[3][1]=2;
         brd[4][1]=2;

         strategy->setGameBoard(brd);
         strategy->displayBoard();
         EXPECT_EQ(9,computer.rowScoreAPlay(2,3,3,strategy));
         EXPECT_EQ(9,computer.scoreAPlay(2,3,3,strategy));
         EXPECT_EQ(0,computer.colScoreAPlay(2,3,3,strategy));
         EXPECT_EQ(5,computer.colScoreAPlay(1,3,3,strategy));
     }

     //... 
     }

Google を使用した単体テストのリファレンスと、優れた単体テスト開発を教えてください。

ありがとうございます。

4

2 に答える 2

16

成功するか失敗するかに関係なく、すべてをテストしています。これは、EXPECT_EQではなくを使用しているためですASSERT_EQ

ドキュメントから:

失敗すると、ASSERT_* は致命的な失敗を引き起こし、現在の関数から戻りますが、EXPECT_* は致命的ではない失敗をもたらし、関数の実行を継続できるようにします。

通常EXPECT_*は、残りのテストを実行し続けて有用な出力を得ることができるため、より適切なオプションです。ただし、ASSERT_*テストを続行しない方がよいでしょう。

たとえばstd::vector<std::string> results、最初の要素として "OK" が必要な場合は、次のようにします。

ASSERT_FALSE(results.empty());  // No point continuing if results is empty
EXPECT_EQ("OK", results[0]);    // Check first element
于 2012-07-06T12:29:38.003 に答える
5

このテストで列挙したすべての等式をテストしているのか、それとも最初のものだけをテストしているのか疑問に思います。

彼らの紹介ページから:

ASSERT_* バージョンは、失敗すると致命的な失敗を生成し、現在の関数を中止します。

つまり、最初にアサートが失敗すると、テストが停止します。

ただし、すべてのテストはとにかくパスする必要があるため、それは問題ではありません。

于 2012-07-06T10:07:04.807 に答える