搞了3个礼拜的单元测试了,把最近所学所用的东西记录一下,顺便为公司接下来要做的单元测试培训做下背书。
首先什么是单元测试。
在面向对象编程中,通常一个类会承担一个单一的职责,所以我们可以用类来划分单元。单元测试,就是针对项目中的各个类进行测试。它侧重于发现单元内部的逻辑错误,属于白盒测试的范畴。
单元测试强调以下几点:
语句覆盖:选择足够的测试数据,使得代码的每个语句都至少被执行一次。
判定覆盖:选择足够的测试数据,使得程序的每个判定条件都至少出现一次真值和一次假值。
条件覆盖:使得每一个判断语句的每个逻辑条件可能的值至少出现一次。
条件组合覆盖:即当一个判定条件由多个条件组合二成时,使得每个条件的各种可能的组合都出现一次。
数据覆盖:即用尽可能多的数据传入接口中进行测试。
单元测试入口。
在c++中,任何程序都需要main函数,gtest同理,下面是单元测试的入口main。
#include <gtest/gtest.h>
int main(int argc,char **argv)
{
test::InitGoogleTest(&argc,argv); //初始化gtest
return RUN_ALL_TESTS(); //运行程序中所有的测试用例
}
测试用例编写。
首先我们得有一个接口:
int sum(int a,int b)
{
sum = a + b;
if(sum > 100)
return 100;
return sum;
}
测试用例:
TEST(calculate,test_sum)
{
EXPECT_EQ(8,sum(5,3));
EXPECT_EQ(100,sum(60,40));
EXPECT_EQ(100,sum(150,50));
}
EXPECT_EQ(expected,actual),这个断言用来判断actual与expected是否相等。expected是预期值,actual是实际值。
当二者相等时,测试通过。
就是这么简单。