Mock测试可能是脆弱的
Mock测试属于白盒测试,它需要非常熟悉类的内部知识。这是Mock交互特性的副作用。对方法实现的合理修改可能会破坏使用Mock的测试,即便这种方法的运行结果是相同的。
在本例中,EmployeeBO将与EmployeeDAO交互,并使用简单JDBC将员工信息存储于数据库中。假设我们改变了在数据库中存储信息的方式――比如说,将JDBC改为JPA――使用EmployeeJPA替换EmployeeDAO,并在相同的数据库表中存储相同的信息。我们期望已有测试会通过,因为输出(将数据存储在数据库中)没有改变。遗憾的是,我们的测试将以失败告终,因为EmployeeBO和EmployeeDAO之间的交互已经不复存在:现在,EmployeeBO将使用EmployeeJPA在数据库中存储数据,如图2所示。