InvocationTargetException when 运行 junit 中的一个方法
InvocationTargetException when running a method in junit
我收到 NullPointer 异常,在调试代码时收到 InvocationTargetException。我不知道我哪里出错了。有人可以帮我解决这个问题吗!!
@Inject
private Log log;
@PersistenceContext(name = Configuration.PERSISTENT_CONTEXT)
private EntityManager em;
public List<Vehicle> getData() {
List<Vehicle> resultList = new ArrayList<>();
try {
String sql = "SELECT v FROM Vehicle v JOIN v.car c WHERE c.carType = 'BMW'";
//getting an InvocationTargetException here while debugging as junit
Query query = em.createQuery(sql, Vehicle.class);
resultList = query.getResultList();
if(resultList == null){
log.error("List is empty or null");
return null;
}
} catch (IllegalArgumentException ex) {
log.info(ex.getMessage());
log.trace(ex.getCause());
}
return resultList;
}
这是我的 Junit:
@InjectMocks
private FinderManager classUnderTest;
private Query query;
private EntityManager emMock;
@Before
public void setUp(){
emMock = Mockito.mock(EntityManager.class);
query = Mockito.mock(Query.class);
Mockito.mock(Vehicle.class);
}
@Test
public void testMethod(){
List<Vehicle> resultList = new ArrayList<>();
Mockito.when(emMock.createQuery(Mockito.any(String.class)).thenReturn(query);
Mockito.when(query.getResultList()).thenReturn(resultList);
classUnderTest.getData();
}
一直在努力寻找解决方案并解决这个问题!
这可能是因为您在模拟 createQuery
方法时仅使用字符串作为参数,而实际上在您的方法中您使用字符串调用 createQuery
方法以及 class 范围。
在测试方法中用正确的签名模拟方法。
其次,你的测试方法中没有断言语句或验证,你到底要测试什么?
我收到 NullPointer 异常,在调试代码时收到 InvocationTargetException。我不知道我哪里出错了。有人可以帮我解决这个问题吗!!
@Inject
private Log log;
@PersistenceContext(name = Configuration.PERSISTENT_CONTEXT)
private EntityManager em;
public List<Vehicle> getData() {
List<Vehicle> resultList = new ArrayList<>();
try {
String sql = "SELECT v FROM Vehicle v JOIN v.car c WHERE c.carType = 'BMW'";
//getting an InvocationTargetException here while debugging as junit
Query query = em.createQuery(sql, Vehicle.class);
resultList = query.getResultList();
if(resultList == null){
log.error("List is empty or null");
return null;
}
} catch (IllegalArgumentException ex) {
log.info(ex.getMessage());
log.trace(ex.getCause());
}
return resultList;
}
这是我的 Junit:
@InjectMocks
private FinderManager classUnderTest;
private Query query;
private EntityManager emMock;
@Before
public void setUp(){
emMock = Mockito.mock(EntityManager.class);
query = Mockito.mock(Query.class);
Mockito.mock(Vehicle.class);
}
@Test
public void testMethod(){
List<Vehicle> resultList = new ArrayList<>();
Mockito.when(emMock.createQuery(Mockito.any(String.class)).thenReturn(query);
Mockito.when(query.getResultList()).thenReturn(resultList);
classUnderTest.getData();
}
一直在努力寻找解决方案并解决这个问题!
这可能是因为您在模拟 createQuery
方法时仅使用字符串作为参数,而实际上在您的方法中您使用字符串调用 createQuery
方法以及 class 范围。
在测试方法中用正确的签名模拟方法。
其次,你的测试方法中没有断言语句或验证,你到底要测试什么?