对我来说,让一切公开(有时是虚拟的)只是为了能够对所有东西进行单元测试就是一种气味;我不希望其他对象能够调用帮助程序,或直接访问文本框;但我需要知道帮助器完成它的工作,文本框在表单加载时获取其值.
我前段时间提到的解决方案是为测试中的实际对象创建一个“测试代理”.代理派生于被测对象,并不隐藏或覆盖任何行为,但它确实提供了内部可见的getter,setter和/或方法,可以调用被测对象的非公共成员,允许我告诉对象执行某些操作,然后我可以查看结果,而不要求测试依赖于对象内的正确集成,或者只是为了测试目的而在生产代码中公开该方法或其他一些感兴趣的成员.
我看到的优点:
>会员的可见度不取决于您是否需要进行单元测试.
>更好地控制在测试中可以对对象执行的操作,从而实现更灵活和可扩展的测试.
我看到的缺点:
>类计数增加,只为测试目的而开发一个额外的级别.
>必须注意不要以某种方式最终在生产代码中使用测试代理(使构造函数或整个类内部通常都有效)
>在某种程度上,不是“纯”单元测试,而是依赖于代理和被测对象之间的集成.
解决方法
但是,如果您正在使用视图类,这会变得有点复杂,因为您要通过视图进行“公共”输入和输出,而这些输入和输出您要测试但不一定使用此视图组件对代码进行公开.在这种情况下,我认为让测试访问该用户界面是有意义的;通过将那些通常的私有属性暴露给测试(您的代理是一个选项而其他可能根据您使用的语言可用)或者通过编写某种形式的功能测试来驱动UI(同样可用的工具取决于您的环境) ).
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。