gtest学习笔记--5 死亡测试

相关的配置与参考可以看相同系列的第一篇。本篇只提供代码。

#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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值