在JUnit测试案例中无法覆盖List <Tuple>

时间:2019-09-11 06:23:39

标签: java

在我的代码中,我使用List 通过加入各种来捕获查询结果 表并映射到DTO对象。该代码在主体上可以正常工作。但 当我尝试创建测试用例时,无法覆盖List 代码。 请提供您的输入。

例如:

    @SuppressWarnings("unchecked")
    private List<FeedbackDTO> getList(String sortingProperty, String direction, UUID workflowId, UUID categoryId,
        String type) {

    StringBuilder query = new StringBuilder(
            "select feedback.id, feedback.workflowId, user.userName, user.firstName, "
                    + "user.lastName, feedback.submittedDate, country.countryName, "
                    + "region.regionName, feedback.comments, feedback.ratings, feedback.acknowledged "
                    + "from Feedback feedback, User user, Country country, Region region "
                    + "where feedback.userId = user.id and user.countryId = country.id and user.regionId = region.id "
                    + "and feedback.workflowId = " + "'" + workflowId + "'" + " and feedback.categoryId = " + "'"
                    + categoryId + "'" + " and feedback.type = " + "'" + type + "'" + " order by ");
    if (sortingProperty.equalsIgnoreCase("firstName")) {
        query.append("user.firstName ");
    } 
    query.append(direction);
    Query queryList = entityManager.createNativeQuery(query.toString(), Tuple.class);
    List<Tuple> tupleList = queryList.getResultList();
    List<FeedbackDTO> feedbackList = new ArrayList<FeedbackDTO>();
    for (Tuple tuple : tupleList) {
        FeedbackDTO feedbackDTO = new FeedbackDTO();
        feedbackDTO.setId(UUID.fromString((String) tuple.get("id")));
        feedbackDTO.setUserName((String) tuple.get("userName"));
        feedbackDTO.setFirstName((String) tuple.get("firstName"));
        feedbackDTO.setLastName((String) tuple.get("lastName"));
        feedbackDTO.setCountryName((String) tuple.get("countryName"));
        feedbackDTO.setAcknowledged((Boolean) tuple.get("acknowledged"));
        feedbackDTO.setRegionName((String) tuple.get("regionName"));
        feedbackDTO.setComments((String) tuple.get("comments"));
        feedbackDTO.setSubmittedDate((Date) tuple.get("submittedDate"));
        feedbackDTO.setRatings((Double) tuple.get("ratings"));
        feedbackList.add(feedbackDTO);
    }
    return feedbackList;
}

在我的测试案例中:

    @Test
    public void testGetFeedbackListNoFeedback() {
    try {
        Query queryList = mock(Query.class);

        FeedbackTestDTO feedback = new FeedbackTestDTO();
        feedback.setId(id);
        feedback.setSolutionId(solutionId);
        feedback.setComments("Please swich-on the power");
        feedback.setType("Alternate Solution");

        List<Object> tupleList = new ArrayList<>();

        tupleList.add(feedback);

        StringBuilder query = new StringBuilder(
                "select * from feedback order by user.firstName ASC");

        Sort sort = new Sort("firstName:ASC");
        Pageable pageable = PageRequest.of(0, 20, sort);
        when(entityManager.createNativeQuery(query.toString(), javax.persistence.Tuple.class)).thenReturn(queryList);
        when(queryList.getResultList()).thenReturn(tupleList);
        this.mockFeedbackListDTO = feedbackServiceImpl.getFeedbackList(workflowId, categoryId, "", "",
                "2019-08-29T01:00:00Z", "2019-08-29T13:00:00Z", "5", pageable, true);
        assertEquals(201, this.mockFeedbackListDTO.getCode());
    } catch (BusinessException | ParseException be) {
        assertEquals("No feedback from users", accessor.getMessage(be.getLocalizedMessage()));
    }
}

1 个答案:

答案 0 :(得分:0)

您的列表似乎为空,因此永远不会检查for循环。 添加断言,列表的预期大小应为大小3:

List<Tuple> tupleResults = queryResults.getResultList();
// Check that the list is of size 3
Assert.assertTrue(tupleResults.size() == 3);
for(Tuple t : tupleResults) {
    myDtoObject.setName(t.get("name"));    //0
    myDtoObject.setAge(t.get("age"));      //1
    myDtoObject.setSalary(t.get("salary"); //2
}

@Test
public void test() { 
    Query query = mock(Query.class);
    List<Tuple> tupleList = new ArrayList<>();
    when(query.getResultList().size() > 0).thenReturn(tupleList );
}