sample7

sample7展示了如何使用值参数化测试(value-parameterized tests)来测试一个接口的多个实现的共同属性。test case中的每一个test都有一个参数指向被测试的实现接口的指针。
sample7使用的测试接口和sample6一样在prime_tables.h中定义。
sample7CMake编译规则,在test/src/samples/CMakeLists.txt最后添加以下两行:

add_executable(sample7_unittest sample7_unittest.cc) 
target_link_libraries(sample7_unittest PUBLIC gtest gtest_main)

接着看sample7_unittest.cc中的内容。

sample7_unittest内容

一般而言为了防止一个测试影响后面的测试,应该为每一个测试创建并销毁测试对象,而非重复利用它们。sample7中将为PrimeTable对象定义一个简单工厂函数,在SetUp()中实例化它,并且在TearDown()中删除它。
以下是定义的工厂函数:

typedef PrimeTable* CreatePrimeTableFunc();  //使用typedef定义了一种名为CreatePrimeTableFunc的类型,该类型为一个函数,无参数且返回一个PrimeTable类型的指针。

PrimeTable* CreateOnTheFlyPrimeTable() {
	return new OnTheFlyPrimeTable(); 
}

template <size_t max_precalculated>
PrimeTable* CreatePreCalculatedPrimeTable(){
	return new PriCalculatedPrimeTable(max_precalculated); 
}

在test 内部、test fixture的构造函数、SetUp()和TearDown()方法内部可以使用GetParam()来引用测试参数,在这个例子中测试参数是一个工厂函数,我们在test fixture的SetUp()中调用它来创建和存储PrimeTable的实例。

class PrimeTableTestSmpl7: public TestWithParam<CreatePrimeTableFunc*> {
public: 
	~PrimeTableTestSmpl7() override{ delete table_; }
	void SetUp() override { table_ = (*GetParam())(); }
	void TearDown() override {
		delete table_;
		table_ = nullptr;
	}
protected: 
	PrimeTable* table_; 
}

接下来是使用TEST_P定义的几个test,这几个test同属于test casePrimeTableTestSmpl7。猜测TEST_P的归则和TEST_F一样,test case的名字需要和test fixture的名字一样。

TEST_P(PrimeTableTestSmpl7, ReturnsFalseForNonPrimes){}
TEST_P(PrimeTableTestSmpl7, ReturnsTrueForPrimes){}
TEST_P(PrimeTableTestSmpl7, CanGetNextPrime){}

为了运行value-parameterized tests你还需要实例化他们,或者将他们bind到一个列表,这个列表被来作test 的参数。你可以将他们实例化到不同的模块,或者重复实例化他们。

在sample7中,我们用两个PrimeTable对象的工厂函数参数列表来实例化test,以下是方法。

INSTANTIATE_TEST_SUITE_P(OnTheFlyAndPreCalated, PrimeTableTestSmpl7, Values(&CreateOnTheFlyPrimeTable, 
&CreatePreCalculatedPrimeTable<1000>));

文件中使用的TestWithParamValues都在命名空间testing下。

总结一下
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值