Использование PowerMock для имитации закрытого метода, вызываемого в конструкторе тестируемого класса - PullRequest
0 голосов
/ 19 марта 2019

Я не знаю, возможно ли это с Powermock.Мне нужно использовать Powermock для макета частного метода, который вызывается в конструкторе класса, который мне нужно проверить.Итак, у меня есть тестовый класс, подобный этому:

@RunWith(PowerMockRunner.class)
@PrepareForTest(XMLTransaction.class)
public class CloseSummaryOrCloseTrailerResponseTest {
    public final static String URL="WL_APPSERVER";
    private XMLTransaction xmlTransaction; 

    @Before
    public void initMocks() throws Exception {
        xmlTransaction = PowerMockito.spy(new XMLTransaction(URL)); 
        PowerMockito.doAnswer(new org.mockito.stubbing.Answer<Object>() {
            @Override
            public Object answer(InvocationOnMock invocation) throws Throwable {
                return null; //does nothing
            }
        }).when(xmlTransaction.getClass(), "initialize");
        PowerMockito.doNothing().when(xmlTransaction.getClass(), "initialize");             
    }

    @Test
    public void whenCloseSummaryResponseNoErrorExpectCorrectXmlMsgProduced () throws Exception
    {
    //set the mock object here
        try {                    
            String actualXmlScannerMsg = xmlTransaction.closeSummaryResponseToXMLNoErrors(mockCloseTrailerResponse);
            Assert.assertNotNull(actualXmlScannerMsg);
            Assert.assertEquals(msgNoCarReturnCharCloseSummaryResponse, actualXmlScannerMsg);   
        }
        catch(JsonProcessingException jEx)
        {
            Assert.fail("JsonProcessingException: " + jEx.getMessage());
        }
        catch(Exception ex)
        {
            Assert.fail("Exception occurred: " + ex.getMessage());
        }
    }
}

Я получаю исключение нулевого указателя при создании шпиона.Конструктор new XMLTransaction (URL) вызывает метод initialize , который я и не хочу делать.

Есть ли способ обойти эту проблему.Если я использую конструктор по умолчанию, класс не создается.

1 Ответ

0 голосов
/ 19 марта 2019

Я понял это ... Я создал конструктор по умолчанию и установил для всех классов, созданных в методе initialize, значение null. Удалено это из initMock ()

PowerMockito.doAnswer(new org.mockito.stubbing.Answer<Object>() {
            @Override
            public Object answer(InvocationOnMock invocation) throws Throwable {
                return null; //does nothing
            }
        }).when(xmlTransaction.getClass(), "initialize");
        PowerMockito.doNothing().when(xmlTransaction.getClass(), "initialize");  
...