How to use multiple ArgumentCaptor parameters

When I use more than one ArgumentCaptor parameter, I get Nullpointer. Can anyone understand what went wrong?

@RunWith(PowerMockRunner.class)
@PrepareForTest(FileHelper.class)
public class MyTest {

...

@Before
public void setUp() throws Exception {
PowerMockito.mockStatic(FileHelper.class);
}


@Test
public void save() throws Exception {
ArgumentCaptor<String> argName = ArgumentCaptor.forClass(String.class);
ArgumentCaptor<List> argList = ArgumentCaptor.forClass(List.class);
PowerMockito.doNothing().when(FileHelper.class, "saveTextFile", argName.capture(),
    argList.capture());

...
}

SaveTextFile methods in the FileHelper class:

public static void saveTextFile(String filename, List<String> data) {
...
}

If I run the code, I get this exception:

java.lang.NullPointerException    java.lang.Class.isAssignableFrom( )    org.powermock.reflect.internal.WhiteboxImpl.checkIfParameterTypesAreSame(WhiteboxImpl.java:2432)    org.powermock.reflect.internal.WhiteboxImpl.getMethods(WhiteboxImpl.java:1934)    org.powermock.reflect.internal.WhiteboxImpl.getBestMethodCandidate(WhiteboxImpl.java:1025)    org.powermock.reflect.internal.WhiteboxImpl.findMethodOrThrowException(WhiteboxImpl.java:948)    org.powermock.reflect.internal.WhiteboxImpl.doInvokeMethod(WhiteboxImpl.java:882)    org.powermock.reflect.internal.WhiteboxImpl.invokeMethod(WhiteboxImpl.java:859)    org.powermock.reflect.Whitebox.invokeMethod(Whitebox.java:466)    org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.when(PowerMockitoStubberImpl.java:106)

, , .. , .

+4
1

, , , "", .

" " .

, , ?

, ...

HelperClass.java

public class HelperClass {

    public static void nastyStaticCall(String filename, List<String> data) {
       System.out.println("REAL METHOD CALLED!!");
    }
}

MyClass.java

import java.util.Arrays;

public class MyClass {

    public void testMethod() {
        HelperClass.nastyStaticCall("FILENAME", Arrays.asList("Data"));
    }
}

"MyClass", - ...

import static org.fest.assertions.Assertions.assertThat;
import static org.powermock.api.mockito.PowerMockito.mockStatic;
import static org.powermock.api.mockito.PowerMockito.verifyStatic;

import java.util.List;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.ArgumentCaptor;
import org.mockito.Captor;
import org.mockito.MockitoAnnotations;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest(HelperClass.class)
public class MyClassTest {

    private MyClass classUnderTest;

    @Captor
    private ArgumentCaptor<String> fileNameCaptor;

    @Captor
    private ArgumentCaptor<List<String>> dataCaptor;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);
        mockStatic(HelperClass.class);
        classUnderTest = new MyClass();
    }

    @Test
    public void shouldMakeNastyStaticCall() {
        classUnderTest.testMethod();

        verifyStatic();
        HelperClass.nastyStaticCall(fileNameCaptor.capture(), dataCaptor.capture());

        assertThat(fileNameCaptor.getValue()).isEqualTo("FILENAME");
        assertThat(dataCaptor.getValue()).containsOnly("Data");
    }
}

, - , , - .

, , , , "", "", ; - .

, "" "".

, .

+2

Source: https://habr.com/ru/post/1543656/


All Articles