假設我有一個傳統的JUnit測試套件,其中包括以下測試:解決Java類路徑地獄
public class AwesomeTest {
public void testBusinessLogic() {
...
[awesome mocking library]
...
}
}
public class AmazingTest {
public void testBusinessProcess() {
...
[amazing xml operation]
...
}
}
現在假設真棒嘲諷庫依靠真棒BCEL字節碼生成庫,包含類org.useful.XMLClass
,這個庫有版本1的XMLClass。
現在假設Amazing Xml操作依賴於包含類org.useful.XMLClass
的Amazing Xml庫,並且此庫具有XML Class的第2版。
同時假定類2版本與版本1向後兼容 - 所以它永遠版本在classpath中具有更高的優先級 - 它打破了其他版本的依賴關係。
另外,假設有400次測試,依靠真棒嘲弄庫 - 所以重寫不是一個理想的選擇。
同時假定一些關鍵的業務功能,已建成以驚人的XML libary - 和強烈優選不重寫。
你如何解決這個類路徑地獄的情況 - 從運行螞蟻測試分開(假設你用Ant運行它們)有兩個不同的手動排序類路徑和手動確定測試子組的兩倍? (我打開自定義類加載器的想法 - 但似乎差不多的水平可維護性與螞蟻的解決方案的雙定製類路徑)
是的,多數民衆贊成在地獄。錯誤似乎與字節碼發生器捆綁在一起的XML文件。我會建議更新你的模擬庫。 – Perception 2013-02-28 12:26:10
也許你可以得到「Awesome BCEL字節碼生成庫」的源代碼,並創建一個依賴類org.useful.XMLClass的重命名版本的分支。 – gontard 2013-02-28 12:28:52
我同意沒有簡單的答案。也許你可以嘗試使用自定義類加載器......但這看起來似乎比它的價值更努力。我會用XML庫或模擬操作的新庫重寫測試。 – RudolphEst 2013-02-28 12:43:14