1
"getEntityManager"라는 private 메소드가있는 클래스를 테스트하고 있습니다. 이 메소드는 public 메소드 "getAllProducts"에서 사용될 엔티티 관리자 인스턴스를 리턴합니다. 그래서 PowerMockRunner를 사용합니다. 내 의존성은 다음과 같습니다Powermock : 스파이 된 클래스를 사용하는 동안 조롱 된 객체를 반환하지 못했습니다.
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
하이어 내 (@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를 사용해보십시오. 마지막으로, 좋은 대답을 얻지 못하면 powermock에 대한 Google 그룹을 사용해보십시오. 그리고 마지막으로 라인 번호 예외가 있습니다. 코드의 어느 줄에서 예외가 있다고 말하면 도움이된다고 생각하지 않습니까? – GhostCat
예외의 마지막 줄뿐만 아니라 전체 스택 추적을 추가하십시오. –