#include <limits.h>
#include "sample1.h"
#include "gtest/gtest.h"
namespace {
TEST(FactorialTest, Negative) {
EXPECT_EQ(1, Factorial(-5));
EXPECT_EQ(1, Factorial(-1));
EXPECT_GT(Factorial(-10), 0);
TEST(FactorialTest, Zero) {
EXPECT_EQ(1, Factorial(0));
TEST(FactorialTest, Positive) {
EXPECT_EQ(1, Factorial(1));
EXPECT_EQ(2, Factorial(2));
EXPECT_EQ(6, Factorial(3));
EXPECT_EQ(40320, Factorial(8));
TEST(IsPrimeTest, Negative) {
EXPECT_FALSE(IsPrime(-1));
EXPECT_FALSE(IsPrime(-2));
EXPECT_FALSE(IsPrime(INT_MIN));
TEST(IsPrimeTest, Trivial) {
EXPECT_FALSE(IsPrime(0));
EXPECT_FALSE(IsPrime(1));
EXPECT_TRUE(IsPrime(2));
EXPECT_TRUE(IsPrime(3));
TEST(IsPrimeTest, Positive) {
EXPECT_FALSE(IsPrime(4));
EXPECT_TRUE(IsPrime(5));
EXPECT_FALSE(IsPrime(6));
EXPECT_TRUE(IsPrime(23));
}
该例子可以看出使用GTEST基本的“套路”:
1、包含头文件(gtest.h、待测试原文件的头文件)
2、编写测试用例(TEST开头),调用函数并断言结果。
该例子使用了如下测试宏
- TEST //定义测试用例
- EXPECT_EQ //非致命断言等于
- EXPECT_GT //非致命断言大于
- EXPECT_TRUE //非致命断言为true
- EXPECT_FALSE //非致命断言为false
更复杂的例子会使用到更多的断言,以及测试固件等功能,可以先看官方的源码学习一下。
Google C++ Testing Framework(简称gtest,http://code.google.com/p/googletest/)是Google公司发布的一个开源C/C++单元测试框架,已被应用于多个开源项目及Google内部项目中,知名的例子包括Chrome Web浏览器、LLVM编译器架构、Protocol Buffers数据交换格式及工具等。
优秀的C/C++单元测试
最近使用gtest进行单元测试,采用打桩的形式。关于gtest的详细说明就不多说了,网上的资料一大堆。主要讲解使用时的参数如何配置以及遇到的问题。下面的例子模拟是加、减、乘、除四则运算,前提是不知道加、减、乘、除四则运算是如何实现的。
编译命令自己根据实际情况进行搭建
#include <iostream>
#include <vector>
#include "gte...
本例是从 gtest-1.5.0 自带的 sample 中的 sample1 改写而来,笔者只添加了一个求 n 的阶层的函数,如下。
void Factorial(int n, int & result )
result = 1;
for (int i = 1; i
result *= i;
目的是想测试像这样