私の意見は次のとおりです。部分的なモックは、特に次の場合に問題ありません。
•JNIメソッドを呼び出すモックメソッド。
public void methodToTest() {
int result = invokeLibraryCode();
}
// This method will be mocked
int invokeLibraryCode() {
// This method is native:
com.3rdparty.Library.invokeMethod();
}
•日付を制御する必要がある一方で、現在の日付で動作するモックメソッド:
public void methodToTest() {
Calendar cal = getCurrentDate();
}
// This method will be mocked
Calendar getCurrentDate() {
return Calendar.getInstance();
}
•モックInputStream
、Process
およびその他の抽象クラス:
public void methodToTest(InputStream is) throws IOException {
int i = is.read(); // is.read() is mocked
}
もちろん、最初の2つのケースをインターフェースでカバーすることもできます(com.3rdparty.Library
独自のインターフェースにラップする、実装CurrentDateProvider
するなどですが、それは非常に複雑だと思います)。