當前正在嘗試爲複雜系統編寫單元測試,該系統在其方法之一中使用構造函數,該方法將自身作爲參數注入數據庫上下文並檢索正確的對象來自正確的環境。Mockito,在類的方法內嘲笑構造函數
試圖使用Mockito來模擬這個,並使其返回一個測試對象,而不是試圖從數據庫中找到它;但我很難理解如何使它與傳統技術和@InjectMocks + @Mock註解一起工作。
代碼的本質是如下:
public FooService{
public String fooFindObject(FooDefinition fooDef) throws FooDefinitionException{
FooFinder theFooFinders = new FooFinder(this);
Foo fooObj = theFooFinders.findFoo(fooDef);
//Logic to be tested inside here that will throw exception upon bad foo definitions
return fooObj.trackingId();
}
我怎麼能嘲笑這個FooFinder對象,並使其回到我自己的測試Foo對象,所以我可以測試定義OBJ。正在使用Mockito,並且不允許重寫此代碼以使用FooFinder obj的get/setter - 這不是我的代碼,我只是在那裏測試它。
你被明確要求JVM創建'FooFinder'實例。你不能嘲笑它。如果我是你,我可以修改我的代碼,這樣'FooFinder theFooFinders'是一個字段。對於應用程序,我肯定會使用DI框架或最壞的情況,我會從不同的類中設置它。 – NewUser
我同意,使用DI併爲它提供一個模擬對象會容易得多,而且如果我找不到解決方案,我最終可能會推出代碼提交來實現。 –
提高可測性的推動不應該成爲任何人的問題。我不確定你的限制,但給它一個鏡頭。 – NewUser