3. 白盒测试和单元测试的区别:(1)、测试目的:一个是测试程序的整体逻辑,另一个是测试程序中一个独立的模块;(2)、通常的执行人员不一样:白盒一般由专门的白盒测试人员完成,单元测试一般由程序员自己完成。
例程:
#include "gtest/gtest.h" #include <iostream> using namespace std; int fun(int a, int b, int x) { if (a > 1 && b == 0) { x = x / a; } else { } if (a == 2 || x > 1) { x = x + 1; } else { } return x; } //语句覆盖法:使程序中的每个可执行语句至少执行一次 TEST(TestCase1, case1) { EXPECT_EQ(2, fun(2, 0, 3));//good EXPECT_EQ(4, fun(2, 1, 3));//bad } //判定覆盖法:使得程序中的每个判断的取真分支和取假分支至少经历一次,即判断的真假值均曾被满足 TEST(TestCase1, case2) { EXPECT_EQ(4, fun(1, 0, 3)); EXPECT_EQ(1, fun(1, 0, 1)); } //条件覆盖法:要使每个判断中每个条件的可能取值至少满足一次 TEST(TestCase1, case3) { EXPECT_EQ(2, fun(2, 0, 3)); EXPECT_EQ(1, fun(1, 0, 1)); EXPECT_EQ(2, fun(2, 1, 1)); } //判定条件覆盖法:使得判断中每个条件的所有可能至少出现一次,并且每个判断本身的判定结果至少出现一次 TEST(TestCase1, case4) { EXPECT_EQ(2, fun(2, 0, 3)); EXPECT_EQ(2, fun(2, 1, 1)); EXPECT_EQ(4, fun(1, 0, 3)); EXPECT_EQ(1, fun(1, 1, 1)); } //路径覆盖法:要求覆盖程序中所有可能的路径 TEST(TestCase1, case5) { EXPECT_EQ(2, fun(2, 0, 3)); EXPECT_EQ(1, fun(1, 0, 1)); EXPECT_EQ(2, fun(2, 1, 1)); EXPECT_EQ(0, fun(3, 0, 1)); } int main(int argc, char **argv) { ::testing::InitGoogleTest(&argc, argv); return RUN_ALL_TESTS(); cout<<"ok!"<<endl; return 0; }