微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用受保护成员通过继承类进行测试

如何解决使用受保护成员通过继承类进行测试

让我们假设您有一个 C++ 类,例如带有难以测试的内部状态机。假设您有一个适当的体系结构,其中包含被测试类使用的所有类的模拟。被测类有一些公共接口和一些非公共内部实现。

您想正确地对此类进行单元测试。为了确保它的所有部分都能正常工作,您需要创建一些不允许通过公共接口的示例条件。但是,您想测试在这些情况下系统是否正确响应。

一种可能性是保护您的成员变量,以便专门为单元测试创​​建的继承类能够扩展公共接口以在测试期间控制这些变量。例如,您可以将系统设置为某种状态,设置一些内部变量并确保例如状态转换是根据您的要求。

从设计的角度来看:保护非公共成员以使其更易于测试是否合理?你有什么意见?是否有更好的替代设计决策?

解决方法

我遇到了类似的问题。老实说,我不明白为什么你不应该测试类的私有部分。

我对此的解决方案是仅对 private 语句使用预编译器。

#ifndef UNITTEST
private:
#endif // UNITTEST

当然,我们现在可以争辩说,我正在操纵原始类本身,我不再在实际条件下正确测试,但是如果您在这个单元测试中测试一个类而不是多个类,我认为没有问题。

这个关于 protected 的问题有点像为了嘲讽而制作方法 virtual 的问题。你必须逐案决定。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。