谷歌测试继续测试
googleTest continue testing
我想知道我是否正在测试我在此测试中列出的所有平等,或者我是否只测试第一个。
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_* 版本在失败时会生成致命故障,并中止当前函数。
这意味着第一个失败的断言将停止测试。
但这并不重要,因为无论如何,所有测试都应该通过。
相关文章:
- 使用C++库在Android项目中修改gradle中的cmake参数,用于插入指令的测试
- 循环后如何继续阅读
- 无法编译 rtmidi 测试 cmidiin.cpp 文件, 非法指令
- 尽管测试成功,CppUnit测试核心仍被丢弃.为什么
- 数据成员SFINAE的C++17测试:gcc vs clang
- 如何使用重载的相等(==)运算符向测试用例添加描述
- 为什么二进制搜索在我的测试中不起作用
- 从父数组测试用例构造二叉树失败
- 我正在尝试使用 c++ 创建一个货币转换程序,我不知道如何继续
- 试图对缓存进行跨步测试,但程序并没有结束
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- OpenGL在启用深度测试时不会丢弃我的碎片
- 为测试目标创建具有不同源文件夹的文件
- 在子目录中使用target_sources()命令时用于单元测试(qtest)的项目结构
- VC++本机单元测试,找不到调试符号
- 换位表导致测试失败(但在游戏中运行良好)
- 用于交叉编译和CMake的预处理器宏的单元测试
- 测试回文时程序不会继续运行 (C++)
- 使用 ASSERT_DEATH 时,有没有办法在应用程序终止后自动继续执行所有测试
- 谷歌测试继续测试