![4fe189c9b9aead476eb8ece73ddc1529.png](https://i-blog.csdnimg.cn/blog_migrate/38295e9a67b7968d907376e50a05ac7e.jpeg)
引用:Andrea Arcuri, Gordon Fraser, and René Just.2017. Private API Access and Functional Mocking in Automated Unit Test Generation. In Proceedings of the International Conference on Software Testing, Verification and Validation (ICST), March 13-17 2017, pp. 126-137.
摘要:
在测试过程中,并非所有面向对象的代码都可以被简单的方法测试到。代码依赖对象可能很难甚至无法实例化,面向对象的封装会使得简单代码变得难以测试。当发生这种情况时,开发人员可以使用模拟复杂依赖关系的模拟对象,或者使用Java反射绕过面向对象的封装,直接访问私有API。在本文中,我们通过扩展EvoSuite单元测试生成工具以及直接访问私有API的能力来研究这个问题,并使用流行的Mockito框架创建模拟对象。但需要注意的是,这不会影响生成测试的有用性:如果重命名字段,即使该重命名是保留语义的重构的一部分,访问私有字段的测试也可能会失败。这样的失败不会揭示真正的回归错误,但这却是误报并且会浪费开发人员审查和修复测试的时间。我们对SF110和Defects4J基准测试的实验证实,在代码覆盖率和错误发