Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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:

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

like image 870
Global Dictator Avatar asked Dec 18 '13 11:12

Global Dictator


1 Answers

Try to put initMocks in @Before instead of @BeforeClass method. What you are trying to do is to set some fields in a static method. That's my guess.

like image 170
czajek Avatar answered Sep 28 '22 12:09

czajek