by Anhkgg | 2018年12月14日 | 075/100
写代码这么久,还真是第一次正儿八经写单元测试。以前一直认为编码和测试是两个行当,叫做RD和QA。
最近学了「单元测试」的部分内容之后,才知道测试也分级别,最基本的单元测试是RD自己的事情。其实RD确认也一直做了这件事情,只是我没有意识到而已。
单元测试就是测试写出的函数或类的功能的正确性,保证代码质量,避免出现某些黑盒测试无法覆盖的功能点,把bug消灭在开发阶段,提高效率。
理解之后,其实就知道,平实写代码,进行功能验证的时候,就是在做单元测试。
但是确认没有做到那么规范和完美。
单元测试常用的工具是GTest和BTest,顾名思义,前者叫做google test。
这次我使用的就是GTest,从https://github.com/google/googletest下载代码之后,进入googletest\\msvc\\2010,打开gtest.sln,然后编译出lib文件。
创建单元测试工程,设置include目录\googletest\include,和lib目录。
基本代码结构就是如此,通过TEST宏来定义单侧函数,尽量做到一个TEST测试一个独立功能,或者相关功能。
#include "gtest/gtest.h"
TEST(ProjectTest, TestName)
{
}
int main(int argc, char** argv)
{
testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}
然后使用EXPECT_EQ来判断函数结果是否符合预期,比如:
EXPECT_EQ(true, GetColumnCount(count));
EXPECT_EQ(5, count);
EXPECT_EQ(0, _stricmp("hijklm", data));
GTesth还有其他高级的功能,Moch,Hook之类,暂时并没有涉及到。
最后如果所有测试用例通过,显示如下:
[==========] Running 2 tests from 1 test case.
[----------] Global test environment set-up.
[----------] 2 tests from WordTableTest
[ RUN ] WordTableTest.BuildIn
[ OK ] WordTableTest.BuildIn (0 ms)
[ RUN ] WordTableTest.UserType
[ OK ] WordTableTest.UserType (0 ms)
[----------] 2 tests from WordTableTest (2 ms total)
[----------] Global test environment tear-down
[==========] 2 tests from 1 test case ran. (3 ms total)
[ PASSED ] 2 tests.