相关的配置与参考可以看相同系列的第一篇。本篇只提供代码。
#include "gtest/gtest.h"
#include <list>
#ifndef _WIN64
#pragma comment(lib,"../lib86/gmock.lib")
#pragma comment(lib,"../lib86/gmock_main.lib")
#pragma comment(lib,"../lib86/gtest.lib")
#pragma comment(lib,"../lib86/gtest_main.lib")
#else
#pragma comment(lib,"../lib64/gmock.lib")
#pragma comment(lib,"../lib64/gmock_main.lib")
#pragma comment(lib,"../lib64/gtest.lib")
#pragma comment(lib,"../lib64/gtest_main.lib")
#endif // !_WIN64
/*
参考链接
https://cloud.tencent.com/developer/article/1383790
*/
/*
死亡测试
1、*_DEATH(statement, regex`)
参数1 statement是被测试的代码语句
参数2regex是一个正则表达式,用来匹配异常时在stderr中输出的内容
///编写死亡测试案例时,TEST的第一个参数,即testcase_name,请使用DeathTest后缀。原因是gtest会优先运行死亡测试案例,应该是为线程安全考虑。
2、*_EXIT(statement, predicate, regex`)
参数1statement是被测试的代码语句
参数2predicate 在这里必须是一个委托,接收int型参数,并返回bool。
参数3regex是一个正则表达式,用来匹配异常时在stderr中输出的内容
*/
/*
如果测试夹具类由普通测试和死亡测试共享,则可以使用
使用“or”或“typedef”为测试夹具类引入别名并避免重名
class FooTest : public ::testing::Test { ... };
using FooDeathTest = FooTest;
TEST_F(FooTest, DoesThis) {
// normal test
}
TEST_F(FooDeathTest, DoesThat) {
// death test
}
*/
void Foo()
{
std::cerr << "Failed Foo";
_exit(0);
}
TEST(MyDeathTest, Foo)
{
//设置此时的模式,默认"fast";其他"threadsafe";
testing::FLAGS_gtest_death_test_style = "fast";
//".*Foo"匹配上了测试预期,".*FAAA"而第6行没有。
//EXPECT_DEATH(Foo(), ".*Foo");
//EXPECT_DEATH(Foo(), ".*FAAA");
EXPECT_EXIT(Foo(), ::testing::ExitedWithCode(0), ".*Foo");
}
int main(int argc, char **argv) {
try
{
testing::InitGoogleTest(&argc, argv);
RUN_ALL_TESTS();
}
catch (std::exception& e)
{
std::cout << e.what() << std::endl;
}
system("pause");
return 0;
}