谷歌测试继续测试

googleTest continue testing

本文关键字:测试 继续 谷歌      更新时间:2023-10-16

我想知道我是否正在测试我在此测试中列出的所有平等,或者我是否只测试第一个。

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));
     }
     //... 
     }

你会参考谷歌的单元测试,以及良好的单元测试开发吗?

谢谢和问候。

无论它们通过还是失败,您都在测试它们。这是因为您使用的是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
我想知道我是否

正在测试我在此测试中列出的所有平等,或者我是否只测试第一个。

从他们的介绍页面:

ASSERT_* 版本在失败时会生成致命故障,并中止当前函数。

这意味着第一个失败的断言将停止测试。

但这并不重要,因为无论如何,所有测试都应该通过。