我想知道我是在测试这个测试中列出的所有等式,还是只测试了第一个。
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的单元测试和良好的单元测试开发的ref吗?
谢谢并致以问候。
发布于 2012-07-06 20:29:38
无论它们是通过还是失败,您都在对它们进行测试。这是因为您使用的是EXPECT_EQ而不是ASSERT_EQ。
来自the docs
当它们失败时,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-06 18:07:05
我想知道我是在测试这个测试中列出的所有等式,还是只测试了第一个。
ASSERT_*版本在失败时会生成致命故障,并中止当前函数。
这意味着第一个失败的断言将停止测试。
但这并不重要,因为所有的测试都应该通过。
https://stackoverflow.com/questions/11359758
复制相似问题