Я тестирую класс, который имеет частный метод getEntityManager. Этот метод возвращает экземпляр менеджера сущностей, который будет использоваться в общедоступном методе «getAllProducts». Поэтому я использую PowerMockRunner; Мои зависимостей:Powermock: возвращение издевающихся объектов при использовании класса spied не удалось
junit-4.1.2
mockito-all-1.10.19
powermock-module-junit4- 1.6.5
powermock-api-mockito-1.6.5
javassist-3.12.1.GA
Hier мой (@GhostCat расширенный) Код:
@RunWith(PowerMockRunner.class)
@PrepareForTest(ProduktDB.class)
public class ProduktDBTest {
static final String PRODUCTID= "id";
List<Product> productList;
EntityManager emmock;
Query q;
@Before
public void setUp() throws Exception {
basicProductList= new ArrayList<>();
BasicProductDao basicProductDao= new BasicProductDao();
basicProductDao.setId(PRODUCTID);
basicProductList.add(basicProductDao);
emmock= mock(EntityManager.class);
q= mock(Query.class);
}
@Test
public void getAllProducts() throws Exception {
when(emmock.createQuery(anyString())).thenReturn(q);
when(q.getResultList()).thenReturn(productList);
ProduktDB spied= spy(new ProduktDB());
/* ***********this is the line with the error:****** */
PowerMockito.doReturn(emmock).when(spied, "getEntityManager");
assertEquals(spied.getAllProducts().get(0).getId(),PRODUCTID);
}
}
Однако я получаю следующее сообщение об ошибке, когда я хочу, чтобы добавить возвращаемое значение по вызову в частный метод:
java.lang.NullPointerException
at org.powermock.api.mockito.internal.expectation.PowerMockitoStubberImpl.addAnswersForStubbing(PowerMockitoStubberImpl.java:68)
Теперь я изменить критическую линию на следующее:
PowerMockito.when(spied, "getEntityManager").thenReturn(emmock);
Нет. Я получаю другую ошибку, но безвредна (см. Решение ниже). :)
Сторона примечания: не используйте «_» в именах переменных. За исключением констант, таких как PRODUCT_ID. И имена методов должны быть camelCase. И вместо прямого вызова prepareList(), используйте @Before. Наконец: если вы не получили здесь хорошего ответа, попробуйте группы google для powermock. И, наконец: у вас есть исключение с номером строки. Разве вы не думаете, что было бы полезно, если бы вы сказали нам, какая строка в вашем коде дает это исключение? – GhostCat
Пожалуйста, добавьте полную stacktrace, а не только последнюю строку исключения. –