我有一個類,它應該將數據從一種格式轉換爲另一種格式(數據庫到庫類型)。它看起來像:轉換器類測試驅動
public LibraryType convertToLibrary(Database db, Parameters params) {
Preconditions.checkNotNull(db," missing database for conversion");
Preconditions.checkNotNull(params, "missing parameters for conversion");
LibraryType lib = basicFactory.createLibraryType();
lib.setName(db.getName());
ComponentType type = convertStructure(db.getStructure(),params);
if (type != ComponentType.EMPTY) {
lib.addComponent(type);
}
return lib;
}
ComponentType convertStructure(Structure s, Parameters params) {
if (!params.isStructureAllowed(s)) return ComponentType.EMPTY;
ComponentType comp = basicFactory.createComponentType();
comp.setName(s.getName());
return comp;
}
我有這個概念的兩個問題。
的方法convertStructure應該是私有的,因爲它時並不需要從外部調用它,但是出於測試目的,我將它定義包範圍內,這看起來並不那麼好看
參數(params)被傳遞給子方法。實際上,我會使用一個類的字段,可以在構造函數中插入,但由於使用guice作爲DI框架,我無法將這些數據傳遞給構造函數。參數將在運行時更改。所以我需要將它作爲方法參數傳遞。我可以將它設置爲convertToLibrary方法中的類字段,但是我無法測試convertStructure方法。
我遇到了設計問題還是有任何有用的解決方法?將它分成不同的類別是否有意義,這對我來說聽起來不太好,因爲我仍然認爲這是班級(轉換數據)的一項責任(SRP)?
感謝您的幫助
這不是全班。在convertStructure中,稍後會有另一個調用,用於轉換結構的子元素等等。所以最終可能會發生,你將會有5個不同的if語句(在每種方法中可能只有一個),這樣它會增加測試方法的數量 – SimFirehawk
它可能發生。但也許它不會。 TDD的方式是做最好的一刻。一旦你發現新的東西,改變/適應測試和/或生產代碼的新知識。 –