引数を取り、引数からプライベートハッシュマップを作成するクラスがあります。
Public class Table {
private Map<String, String> map = new HashMap<String, String>();
private Workbook workbook;
// approach 1
Public Table(Workbook workbook) {
this.workbook = workbook;
// populate map using workbook
}
// approach 2
Public Table(InputStream is) {
this.workbook = WorkbookFactory.create(is)
// Populate map
}
// approach 3
Public Table(File file) {
this.workbook = WorkbookFactory.create(file)
// populate map
}
}
Workbook は Apache Poi Workbook です。junitとmockitoも考慮した最善のアプローチは何でしょうか。
これによると、 http://misko.hevery.com/code-reviewers-guide/flaw-constructor-does-real-work/コンストラクターで新しいキーワードを避ける必要があるため、アプローチ1に傾いています。しかし、このクラスを使用するためにクライアントに Apache POI の知識を持たせたくありません。
アプローチ 2 と 3 はかなり似ています。これにより、ファイルまたは入力ストリームを渡すことができ、基になる実装について心配する必要がなくなります。しかし、このアプローチではワークブックをモックできないため、モックは難しいでしょうか?