当 class 的静态方法 return 与 class 的对象相同时,PowerMock 抛出 initialzationError
PowerMock throw initialzationError when a class's static method return same a same class's object
一个initializationError
被抛出。我正在使用 powermock 1.6.4 和 javassist-3.20.0。看来我不能在同一个class(同时)上模拟和模拟静态。
interface B
{
public static B getA()
{
return new B()
{
};
}
}
a test code is:
@PrepareForTest({B.class})
@Test
public void testB()
{
B a = mock( B.class );
mockStatic( B.class );
when( B.getA() ).thenReturn( a );
}
您必须准备 B
模拟(例如,使用 PowerMockRunner
)否则测试将在这一行抛出 ClassNotPreparedException
:
mockStatic( B.class );
此测试将通过(尽管因为它没有断言,所以说此测试不会抛出异常可能更准确;):
@RunWith(PowerMockRunner.class)
@PrepareForTest({B.class})
public class BTest {
@Test
public void testB() {
B a = Mockito.mock(B.class);
PowerMockito.mockStatic(B.class);
Mockito.when(B.getA()).thenReturn(a);
}
}
我已经使用以下方式验证了这一点:
- Mockito v1.10.19 和 PowerMock v1.6.4
- Mockito v2.7.19 和 PowerMock v1.7.0
一个initializationError
被抛出。我正在使用 powermock 1.6.4 和 javassist-3.20.0。看来我不能在同一个class(同时)上模拟和模拟静态。
interface B
{
public static B getA()
{
return new B()
{
};
}
}
a test code is:
@PrepareForTest({B.class})
@Test
public void testB()
{
B a = mock( B.class );
mockStatic( B.class );
when( B.getA() ).thenReturn( a );
}
您必须准备 B
模拟(例如,使用 PowerMockRunner
)否则测试将在这一行抛出 ClassNotPreparedException
:
mockStatic( B.class );
此测试将通过(尽管因为它没有断言,所以说此测试不会抛出异常可能更准确;):
@RunWith(PowerMockRunner.class)
@PrepareForTest({B.class})
public class BTest {
@Test
public void testB() {
B a = Mockito.mock(B.class);
PowerMockito.mockStatic(B.class);
Mockito.when(B.getA()).thenReturn(a);
}
}
我已经使用以下方式验证了这一点:
- Mockito v1.10.19 和 PowerMock v1.6.4
- Mockito v2.7.19 和 PowerMock v1.7.0