我使用JUnit4和Mockito进行单元测试,现在我正试图将PowerMock添加到我的工具箱中。我马上就遇到了PowerMock的一个奇怪的类加载行为。因此,我使用如下代码:
@PrepareForTest(ClassToMock.class)
public class MyTest
{
@Rule
public PowerMockRule rule = new PowerMockRule();
@Test
public void myTest() throws Exception
{
// some test code using ClassToMock
MyHelper.staticMethod(param);
// some other test code
}
}
MyHelper是来自另一个bundle的某个类,staticMethod()是某个方法,我不需要对其进行模拟。这个方法使用Google Gson和我的一些序列化器(比方说- MySerializer类)。PowerMock扔给我一个javassist。Google Gson和MySerializer的NotFoundException。例如:
Caused by: javassist.NotFoundException: com.google.gson.GsonBuilder
at javassist.ClassPool.get(ClassPool.java:450)
at org.powermock.core.classloader.MockClassLoader.loadUnmockedClass(MockClassLoader.java:220)
我可以将这些类添加到类路径中(添加到已导入的包中),但我不想这样做。为什么PowerMock尝试加载类,这些类在一些方法中使用,这些方法应该只是一个"黑匣子",首先?
有谁能解释一下吗?此外,我可以摆脱加载Gson使用@PowerMockIgnore("com.google.*")注释,但它不工作的MySerializer。而且这似乎也不是一个合适的解决方案。
谢谢!
您的类可能正在使用
静态块
需要使用powermock来抑制,这样它就不会去加载那些静态块
所需的所有类参考此链接查看SuppressUnwantedBehavior