[英]How to unit test getClassLoader() returning null
根據類的javadoc
返回該類的類加載器。 一些實現可能使用null來表示引導類加載器。
當getClassLoader返回null時,我們必須對邏輯進行單元測試。 我們正在使用Java(Java 6)的sun實現。 我們應該怎么做。
我的第一個想法只是模擬Class對象,但是在另一個問題中提到: 使用Mockito和PowerMockito模擬類對象
你不能。 Mockito,Easymock(和Powermock)之類的模擬對象庫無法模擬由引導類加載器加載的類,因為在加載模擬對象庫時它們已經被加載了。 因此它無法操縱字節碼。
因此,一個簡單的解決方法是查看是否可以使用由引導程序類加載器加載的類,例如java.lang
, java.net
, java.io
類。
例如String.class.getClassloader()
將返回null
。
如果您不能輕松地使用自舉類進行測試,那么我將不必為該分支擔心太多,因為它將無法在生產中執行。
將目標類放入其自己的JAR中,然后使用-Xbootclasspath/a:testclass.jar
啟動測試JVM。 這將導致引導類加載器加載該JAR中的所有類。 如果該類需要具有其他依賴關系,則將更加棘手。
另外,我過去的方法是重構代碼以添加特殊的入口點以進行測試:
public void someMethod(Class c) {
someMethodImpl(c, c.getClassLoader());
}
// Exposed for test only.
void someMethodImpl(Class c, ClassLoader cl) {
...
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.