我有这样的代码片段:
@RunWith(PowerMockRunner.class)
@PrepareForTest({Thread.class})
public class AllMeasuresDataTest {
@Before
public void setUp() throws Exception {
}
@Test
public void testGetMeasures() {
AllMeasuresData measure = new AllMeasuresData();
assertEquals(measure.getMeasures(), null);
HashMap<String, Measure> map = new HashMap<String, Measure>();
measure.setMeasures(map);
assertEquals(measure.getMeasures(), map);
measure.setMeasures(null);
assertEquals(measure.getMeasures(), null);
}
@Test
public void testAllMeasuresData() throws IOException {
ClassLoader loader = PowerMockito.mock(ClassLoader.class);
Thread threadMock = PowerMockito.mock(Thread.class);
Vector<URL> vec = new Vector<URL>();
Mockito.when(loader.getResources("measure")).thenReturn(vec.elements());
Mockito.when(threadMock.getContextClassLoader()).thenReturn(loader);
PowerMockito.mockStatic(Thread.class);
Mockito.when(Thread.currentThread()).thenReturn(threadMock);
...
}
}
Run Code Online (Sandbox Code Playgroud)
在运行此测试时,我得到了:
java.lang.LinkageError: loader constraint violation: loader (instance of org/powermock/core/classloader/MockClassLoader) previously initiated loading …Run Code Online (Sandbox Code Playgroud) 在我的工作中,我的实际责任是测试和重构旧代码.
我阅读了2本关于使用遗留代码进行测试和测试的书籍,现在我陷入了困境,没有任何进展.
我只是想用PowerMock来模拟一个对象,因为它是一个静态初始化器.但现在我的问题是,只要我添加"RunWith"注释,我的测试就会崩溃.
这是我的堆栈跟踪.
java.lang.IllegalStateException: Failed to transform class with name test.ContentPanelTest. Reason: java.io.IOException: invalid constant type: 18
at org.powermock.core.classloader.MockClassLoader.loadMockClass(MockClassLoader.java:266)
at org.powermock.core.classloader.MockClassLoader.loadModifiedClass(MockClassLoader.java:180)
at org.powermock.core.classloader.DeferSupportingClassLoader.loadClass(DeferSupportingClassLoader.java:68)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:145)
at org.powermock.modules.junit4.common.internal.impl.JUnit4TestSuiteChunkerImpl.createDelegatorFromClassloader(JUnit4TestSuiteChunkerImpl.java:40)
Run Code Online (Sandbox Code Playgroud)
我认为这可能是我的JRE的一个问题.所以我已经将我正在使用的每个库更新到最新版本.但问题仍然是一样的.
我从互联网上尝试了几种建议的解决方案.但至少有一个人帮我解决了我的问题.
我希望你能帮助我.如果有人需要一些额外的信息我可以发布你需要的任何东西
提前感谢您和奥地利的问候!