简体   繁体   English

将Mockito与PowerMock一起使用时初始化异常错误

[英]Initializing Exception error when using Mockito with PowerMock

I'm using Mockito with PowerMock for the first time and I'm having an error when running the below code at the following line: 我第一次将Mockito与PowerMock结合使用,并且在以下行中运行以下代码时遇到错误:

MockitoAnnotations.initMocks(SearchTest.class);

The error is: 错误是:

java.lang.ExceptionInInitializerError
    at org.mockito.internal.exceptions.stacktrace.ConditionalStackTraceFilter.<init>(ConditionalStackTraceFilter.java:17)
    at org.mockito.exceptions.base.MockitoException.filterStackTrace(MockitoException.java:30)
    at org.mockito.exceptions.base.MockitoException.<init>(MockitoException.java:19)
    at org.mockito.exceptions.misusing.MockitoConfigurationException.<init>(MockitoConfigurationException.java:18)
    at org.mockito.internal.configuration.ClassPathLoader.loadImplementations(ClassPathLoader.java:145)
    at org.mockito.internal.configuration.ClassPathLoader.findPluginImplementation(ClassPathLoader.java:110)
    at org.mockito.internal.configuration.ClassPathLoader.findPlatformMockMaker(ClassPathLoader.java:106)
    at org.mockito.internal.configuration.ClassPathLoader.<clinit>(ClassPathLoader.java:59)
    at org.mockito.internal.configuration.GlobalConfiguration.createConfig(GlobalConfiguration.java:38)
    at org.mockito.internal.configuration.GlobalConfiguration.<init>(GlobalConfiguration.java:32)
    at org.mockito.MockitoAnnotations.initMocks(MockitoAnnotations.java:94) 
Caused by: java.lang.NullPointerException

The code for the test class is: 测试类的代码是:

    import org.apache.http.HttpEntity;
    import org.apache.http.HttpResponse;
    import org.apache.http.client.HttpClient;
    import org.apache.http.client.methods.HttpPost;
    import org.junit.Assert;
    import org.junit.BeforeClass;
    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.junit.runners.Parameterized.Parameters;
    import org.mockito.Matchers;
    import org.mockito.Mock;
    import org.mockito.Mockito;
    import org.mockito.MockitoAnnotations;
    import org.powermock.api.mockito.PowerMockito;
    import org.powermock.core.classloader.annotations.PrepareForTest;
    import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(Parameterized.class)
@PrepareForTest(InputStreamReader.class)

public class SearchTest {   
    private String preFile;
    private String expectedPreFile;
    private String postFile;
    private String expectedpostFile;

    @Parameters
    public static Collection<Object[]> data() {
        return Arrays.asList(new Object[][] {    
        { "test1" } });
    }

    @Mock
    private HttpClient mockHttpClient;
    private HttpPost mockHttpPost;
    private HttpResponse mockHttpResponse;
    private HttpEntity mockHttpEntity; 
    private InputStream mockInputStream;
    private InputStreamReader mockInputStreamReader;
    private BufferedReader mockBufferedReader;

    @Before
    public void setUp() {
        MockitoAnnotations.initMocks(this);
        xstream = new XStream();
    }


    public SearchTest(String folder) {
        this.preFile= folder + "/inpRows.json";
        this.expectedPreFile= folder + "/inpRowsExpected.json";
        this.postFile= folder + "/outRows.json";
        this.expectedpostFile= folder + "/outRowsExpected.json";
    }

    @Test
    /**
     * Simulates the calling of a handler    * 
     * Setup @Parameters with a list of folders containing the test files.  A test is performed for each entry
     * @throws CallbackHandlerException
     * @throws IOException
     * @throws JSONException
     * @throws SecurityException
     * @throws NoSuchFieldException
     * @throws IllegalArgumentException
     * @throws IllegalAccessException
     */
    public void testHandler() throws Exception {

    /**********Set the expected results for the mocked methods****************/
        Mockito.when(mockHttpClient.execute(mockHttpPost)).thenReturn(mockHttpResponse); 
        Mockito.when(mockHttpResponse.getEntity()).thenReturn(mockHttpEntity);              
        Mockito.when(mockHttpEntity.getContent()).thenReturn(mockInputStream);
        PowerMockito.whenNew(InputStreamReader.class).withArguments(mockInputStream).thenReturn(mockInputStreamReader);
        PowerMockito.whenNew(BufferedReader.class).withArguments(mockInputStreamReader).thenReturn(mockBufferedReader);
        PowerMockito.whenNew(JSONObject.class).withArguments(Matchers.any(String.class)).thenReturn(jsonStub);

        searchHandler.pre(); //Call the actual Pre method to be tested

    }
}

Any suggestions why I'm getting this error? 有什么建议为什么我会出现此错误?

Thanks 谢谢

Try to put initMocks in @Before instead of @BeforeClass method. 尝试将initMocks放在@Before而不是@BeforeClass方法中。 What you are trying to do is to set some fields in a static method. 您试图做的是在静态方法中设置一些字段。 That's my guess. 那是我的猜测。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM