C++类的完美单元测试方案——基于C++11扩展的friend语法
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了C++类的完美单元测试方案——基于C++11扩展的friend语法,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1753字,纯文字阅读大概需要3分钟。
内容图文
版权相关声明:本文所述方案来自于《深入理解C++11—C++11新特性解析与应用》(Michael Wong著,机械工业出版社,2016.4重印)一书的学习。
项目管理中,C语言工程做单元测试用例直接写就可以了,对于C++语言工程,曾经听到过“C++类的私有成员在外部无法访问没法写啊,就测测接口吧?”,对于项目管理人员与开发人员,作为C/C++语言使用者的你是否也有过这种烦恼?
提案“单元测试用例以私有成员函数的形式写在被测类的里面,通过预处理宏开关,使得发布时不让单元测试编译链接进去”,方案在语法上可以,而且也没有破坏封装性,但是测试用例的量很庞大跟生产代码搞在一起好不爽有么有,不优雅,没有人会这么做会让自己的代码变成那样。
提案“通过预处理宏开关,使得单元测试时将private替换为public”,看上去这个提案简单,但是也不完美,使用默认的private成员限制(如class FooTest : Foo { int x;}),这个方案处理不了这个情形,另外这个方案要求你的程序中变量名和函数名中不能含有private子字符串。
下面将介绍书中的类单元测试的完美解决方案:
1.语法知识准备:“可以为类模板声明友元”(C++11新特性)
template<typename T>
class Foo {
friend T;
}
如果FooTest是类,那么Foo<FooTest>会被实例化为一个定义了类FooTest为其友元的Foo<FooTest>类。
而若T为内置类型时,如Foo<int>会被实例化为一个普通的没有友元定义的类型。
2.生产代码中的类模板实例化
template<typename T>
class FooT {
public:
friend T;
void DoSomthing(){}
private:
int m_data;
}
using Foo = FooT<int>;
后续的生产代码可以直接使用Foo,生产代码很优雅。
3.测试代码中的设计(与原书稍有出入,根据自身需求调整)
class FooTester; //测试类
using FooTestee = FooT<FooTester>; //被测试类
class FooTester{
public:
void Testcase1() {}
}
在FooTester类里面,我们可以测试FooTestee的私有或公有成员函数,可以访问FooTestee的私有成员变量进行验证。总之单元测试很优雅。
学习了上面的完美方案,为C++11的新特性感到欢欣鼓舞,做一名重视单元测试的对自己有要求的C/C++工作者。感谢深入理解C++11这本书。
内容总结
以上是互联网集市为您收集整理的C++类的完美单元测试方案——基于C++11扩展的friend语法全部内容,希望文章能够帮你解决C++类的完美单元测试方案——基于C++11扩展的friend语法所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。