Mock測試可能是脆弱的
Mock測試屬于白盒測試,它需要非常熟悉類的內部知識。這是Mock交互特性的副作用。對方法實現的合理修改可能會破壞使用Mock的測試,即便這種方法的運行結果是相同的。
在本例中,EmployeeBO將與EmployeeDAO交互,并使用簡單JDBC將員工信息存儲于數據庫中。假設我們改變了在數據庫中存儲信息的方式――比如說,將JDBC改為JPA――使用EmployeeJPA替換EmployeeDAO,并在相同的數據庫表中存儲相同的信息。我們期望已有測試會通過,因為輸出(將數據存儲在數據庫中)沒有改變。遺憾的是,我們的測試將以失敗告終,因為EmployeeBO和EmployeeDAO之間的交互已經不復存在:現在,EmployeeBO將使用EmployeeJPA在數據庫中存儲數據,如圖2所示。