Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在junit中运行方法时调用TargetException_Java_Unit Testing_Junit_Mockito_Hibernate Entitymanager - Fatal编程技术网

Java 在junit中运行方法时调用TargetException

Java 在junit中运行方法时调用TargetException,java,unit-testing,junit,mockito,hibernate-entitymanager,Java,Unit Testing,Junit,Mockito,Hibernate Entitymanager,我得到了一个NullPointer异常,在调试代码时,我得到了一个InvocationTargetException。我不知道我哪里出错了。有人能帮我修一下吗 @Inject private Log log; @PersistenceContext(name = Configuration.PERSISTENT_CONTEXT) private EntityManager em; public List<Vehicle> getData() { List<

我得到了一个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方法。 在测试方法中使用正确的签名模拟方法


其次,您的测试方法中没有断言语句或验证,您到底要测试什么?

是的,这是因为createQuery方法中的类参数!不需要它。谢谢如果解决方案对您有效,请接受答案: