У меня есть частный метод, как показано ниже. Что я хочу протестировать с помощью powermockito, а также мне нужно показать покрытие для него. Для покрытия я использую jacoco .
МетодA содержит вызов поиска и пытается с ресурсом, который вызывает у меня проблемы с получением покрытия кода.
private void methodA() {
InitialContext l1 = new InitialContext();
DataSource ds = (DataSource) l1.lookup(systemQueryData.getDataSource());
try (Connection con = ds.getConnection();
PreparedStatement preparedStatement = con
.prepareStatement(getUnprocessedZsmartGlobalSelectQuery);) {
// some code here ...
}
}
Я использую powermockito для имитации приватного и статического c контента. Я создал макеты, как показано ниже.
initialContext = PowerMockito.mock(InitialContext.class);
datasourceMock = PowerMockito.mock(DataSource.class);
connectionMock = PowerMockito.mock(Connection.class);
preparedStatementMock = PowerMockito.mock(PreparedStatement.class);
Пожалуйста, найдите мой тестовый класс ниже.
//@RunWith(PowerMockRunner.class) // AS this annotation does not play well with jacoco code coverage
I have commented it and taken another approach as suggested in many forums.
@PrepareForTest({ProcessZsmartInvoiceOperation.class, SQLQueryUtility.class, InitialContext.class, DataSource.class,Connection.class, PreparedStatement.class})
public class ProcessZsmartInvoiceOperationTest {
//another approach to enable powermockito
static { PowerMockAgent.initializeIfNeeded(); }
//another approach to enable powermockito
@Rule
public PowerMockRule powerMockRule = new PowerMockRule();
private InitialContext initialContext = null;
private DataSource datasourceMock = null;
private Connection connectionMock = null;
private PreparedStatement preparedStatementMock = null;
@Before
public void init() {
try {
initialContext = PowerMockito.mock(InitialContext.class);
datasourceMock = PowerMockito.mock(DataSource.class);
connectionMock = PowerMockito.mock(Connection.class);
preparedStatementMock = PowerMockito.mock(PreparedStatement.class);
processZsmartInvoiceOperationSpy = PowerMockito.spy(processZsmartInvoiceOperationInstance);
} catch (Exception e) {
e.printStackTrace();
}
}
@Test
public void getUnProcessedEntities_givenDateString_shouldReturnList() {
// START some basic static code to use for testing the method
List<String> listOfUnProcessedInvoice = new ArrayList<>();
listOfUnProcessedInvoice.add("101");
listOfUnProcessedInvoice.add("102");
String dateInput = "11-JUN-20";
// END some basic static code to use for testing the method
try {
PowerMockito.whenNew(InitialContext.class).withNoArguments().thenReturn(initialContext);
// from below statment it does not coverage
PowerMockito.doReturn(datasourceMock).when(initialContext.lookup(Mockito.anyString()));
PowerMockito.doReturn(connectionMock).when(datasourceMock.getConnection());
PowerMockito.doReturn(preparedStatementMock).when(connectionMock.prepareStatement(Mockito.anyString()));
PowerMockito.doNothing().when(processZsmartInvoiceOperationSpy,"setParameter",preparedStatementMock,
Mockito.any(List.class));
List<String> testResponseList = (List<String>)Whitebox.invokeMethod(processZsmartInvoiceOperationSpy,
"getUnProcessedEntities",dateInput);
Assert.assertEquals(listOfUnProcessedInvoice.size(), testResponseList.size());
} catch (Exception e) {
e.printStackTrace();
}
}
}
Когда я запускал этот тестовый пример, он не показывает покрытия. Пожалуйста, проверьте изображение ниже.
введите описание изображения здесь
Пожалуйста, помогите, как имитировать этот метод и получить покрытие кода ..