论文部分内容阅读
在理想模型中,面向对象程序的单元测试应该既能全面覆盖被测试类的所有行为和状态,又能使其独立于其它类的实现。然而,由于绝大部分类都会与其它类存在依赖关系,因此单元测试的全面性和独立性无法同时满足,这就使得软件质量难以得到保证。
在单元测试中引入桩在理论上可以解决这个问题,然而当所需的被依赖类的数量较大且实现复杂时,即使是当今被广泛接受的特定桩,也会因为创建难度过高而无法在单元测试中广泛应用。这时,由于Mock Obiect更强调类间接口的交互,完全忽略被模拟类的实现,可以作为桩的合适替代品。桩和Mock Object的混合使用是在实际应用中使单元测试同时具有全面性和独立性的一个有效途径。
然而,Mock Obiect对被模拟类的极大简化使得类与类之间契约可能存在的不一致性被隐藏,涉及类间交互的单元测试用例不能测出契约不一致错误。所以本文的第一个贡献是通过理论分析和实验数据来讨论Mock Object对契约不一致错误的隐藏问题。
本文第二个贡献是提出了将单元测试用例重用到集成测试的方法,使程序在集成测试时付出较少的额外代价来修改测试用例,即可测出在单元测试时被隐藏的契约不一致错误。这种方法既保持了因为在单元测试中使用Mock Object所带来的优点,又可以在不产生新的测试用例的情况下发现契约不一致错误。为了验证本方法的可行性,本文将通过一个实验来说明通过这种重用机制,隐藏的契约不一致错误可以被发现。