长亭百川云 - 文章详情

「日记」单元测试

汉客儿安全笔记

28

2024-07-13

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.
相关推荐
关注或联系我们
添加百川云公众号,移动管理云安全产品
咨询热线:
4000-327-707
百川公众号
百川公众号
百川云客服
百川云客服

Copyright ©2024 北京长亭科技有限公司
icon
京ICP备 2024055124号-2