【问题标题】:Testing a jpql query with junit and mockito使用 junit 和 mockito 测试 jpql 查询
【发布时间】:2018-12-20 13:35:57
【问题描述】:

有人可以帮我写一个 jpql 查询的单元测试用例吗?我是新来的。

这是要测试的类。

@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'";
        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;

@Mock
private EntityManager emMock;

@Mock
private Query query;

@Mock
private Vehicle vehicle;

@Mock
private Car car;

@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();

}

任何帮助将不胜感激。谢谢! :)

【问题讨论】:

    标签: java unit-testing junit mockito hibernate-entitymanager


    【解决方案1】:

    试试这个,

    @Mock
    private EntityManager em;
    
    @Mock
    private Vehicle vehicle;
    
    @Mock
    private Car car;
    
    @Mock
    private Query query;
    
    @InjectMocks
    private YourDAOClass yourDAOClass;
    
    @Test
    public void testMethod(){
         List<Vehicle> someList = null;
    
    
        when(em.createQuery(Mockito.anyString(), Mockito.any())).thenReturn(query);
    
    
        when(query.getResultList()).thenReturn(someList);
    
        assertThat(yourDAOClass.getData()).isNull()
    
    }
    

    【讨论】:

    • 当我调试测试方法时,它在 getData() 方法中返回一个空查询。我已经编辑了上面的测试类。
    • 它给出了一个 NullPointerException @Shaunak
    • 不应该。让我试试我的系统
    • 是的,请!我一直在努力解决这个问题! @Shaunak
    • 已更新。我已经在我的系统上测试过这段代码,它按预期工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-13
    • 2021-11-06
    • 2020-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多