我继承了一些未经测试的代码,这些代码使用以下方法加载资源:
SomeClass.class.getClassLoader().getResource("somefile");
我编写了以下测试,但与我创建的 Mock 类加载器有 0 次交互。任何人都可以评论这种类型的测试是否可行。
public enum SomeClass {
INSTANCE;
public boolean someMethod() {
URL pathToLicense = SomeClass.class.getClassLoader().getResource("somefile");
return false;
}
}
@Test
public void testLicenseWorkflow(){
ClassLoader cl = PowerMockito.mock(ClassLoader.class);
File f = new File("someFile");
assertTrue(f.exists());
logger.info(f.getCanonicalPath() );
when(cl.getResource("somefile")).thenReturn(f.toURL());
verify(cl).getResource("somefile");
assertTrue(SomeClass.INSTANCE.someMethod());
}
更新-通过类加载器添加资源 我也尝试了以下方法,但是 someMethod 这似乎也不起作用
new URLClassLoader(((URLClassLoader) SomeClass.INSTANCE.getClass().getClassLoader()).getURLs()) {
@Override
public void addURL(URL url) {
super.addURL(url);
logger.info("Calling add URL");
}
}.addURL(f.toURI().toURL());