「日记」单元测试
2018-12-15 23:50:56 Author: mp.weixin.qq.com(查看原文) 阅读量:0 收藏

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.

文章来源: https://mp.weixin.qq.com/s?__biz=MzU4NjY5ODM3Nw==&mid=2247483761&idx=1&sn=5da0840fd262cc3756e0ddff528060bc&chksm=fdf61a97ca819381488353f20a014823099d38c50eba4e0e82afcc292341654495189a1a9757&scene=58&subscene=0#rd
如有侵权请联系:admin#unsafe.sh