使用-fno-access-control进行单元测试

def*_*ode 6 c++ gcc unit-testing

在单元测试时,我已经看到许多疯狂的方法来访问私有变量.我见过的最令人兴奋的是#define private public.

但是,我从未见过有人建议在编译器级别关闭私有变量.我一直以为你不能.我向许多开发人员抱怨过,如果你能告诉编译器退出这个文件,那么单元测试会容易得多.

然后我偶然发现-fno-access-control gcc编译器选项.这显然是单元测试的完美方式.您的原始源文件未经修改,没有为单元测试注入的朋友,没有使用奇怪的预处理器魔法重新编译.在编译单元测试时,只需轻按"无访问控制"开关即可.

我错过了什么吗?这是测试银弹的单位我希望是吗?

我看到的唯一缺点是该技术的gcc特定性质.但是,我假设MSVS有一个类似的标志.

e.J*_*mes 6

我认为单元测试不需要访问私有成员.

通常,单元测试用于测试类的接口,而不是内部实现.这样,对内部的更改只会在接口被泄露时中断测试.

看看我的回答对一个类似问题,以及随之而来的讨论.可以肯定的是,这是一个有争议的话题,但这是我的0.02美元.