2015-08-25 46 views
0

我有一個基本的maven項目和文件夾結構:-main和-test目錄。在基本的Java Maven項目中使用存根

我在主源代碼目錄下有一個包,它由幾個類組成,比如a.class b.class和c.class,全部在同一個包下。所有類都相互依賴。爲了進行適當的單元測試,並從每個類中刪除依賴關係,我編寫每個a,b和c類的存根類,並將它們定義爲具有相同的包,並將它們放入測試源目錄中。然後我運行:mvn test

很好,存根現在首先從類路徑中找到並使用,但我想修改類路徑(即時?),以便在測試類a時,我需要原來的a.class和stubs用於b.class和c.class。同樣,當測試類b時,我需要將原始類b和stub用於a.class和c.class。

如何使用Maven和JUnit完成此操作?

這在Java中是令人沮喪的,因爲在C++中,可以使用makefile源路徑和用戶定義的包含路徑在單元測試頭文件中強制首先找到存根,然後明確地將include添加到原始班級進行測試。

+3

聽起來像你走錯了路。我會建議開始使用Mocking ...並且不要自己實現存根。此外,來自'src/test/java'的類是類路徑中第一個類。除此之外,如果您需要動態修改類路徑,那麼設計中會出現問題。你可以做一個簡單的示例項目,並把它放在Github上,這樣我們可以提出更好的建議... – khmarbaise

+0

可能是一個好主意,使用像Mockito這樣的圖書館。 –

回答

0

如果你有依賴類,你應該爲每個類使用接口。然後,您可以實際解決依賴關係問題...

0

就像@khmarbaise已經指出你走錯了路。在Java中,如果要測試靜態方法,則最好使用Mocking庫,如MockitoPowerMock

這些庫可幫助您爲現有類編寫存根,而無需修改類本身。檢查Mockito的Maven Central。你可以通過使用maven來包含它

<dependency> 
    <groupId>org.mockito</groupId> 
    <artifactId>mockito-core</artifactId> 
    <version>1.10.19</version> 
    <scope>test</scope> 
</dependency> 

然後使用JUnit你最終爲你的現有類寫Mocks。有許多關於Mockito outthere的教程。