我见过很多在单元测试时访问私有(private)变量的疯狂方法。我见过的最令人兴奋的是 #define private public
。
但是,我从未见过有人建议在编译器级别关闭私有(private)变量。我一直以为你做不到。我曾向许多开发人员提示说,如果您可以只告诉编译器为这个文件后退,单元测试会容易得多。
然后我偶然发现了 -fno-access-control
GCC 编译器选项。这显然是单元测试的完美方式。你的原始源文件没有被修改,没有注入(inject) friend 只是为了单元测试,没有用奇怪的预处理器魔法重新编译。编译单元测试时,只需轻按“无访问控制”开关即可。
我错过了什么吗?这是我希望的单元测试 Elixir 吗?
我看到的唯一缺点是该技术特定于 GCC 的性质。但是,我假设 MSVS 有一个类似的标志。
最佳答案
我认为单元测试不需要访问私有(private)成员。
一般来说,单元测试旨在测试类的接口(interface),而不是内部实现。那样的话,只有在接口(interface)被破坏的情况下,对内部结构的更改才会破坏测试。
看看我的 answer类似的问题,以及随后的讨论。可以肯定的是,这是一个有争议的话题,但这是我的 0.02 美元。
关于c++ - 使用 -fno-access-control 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/860923/