2016-12-29 6 views
1

다음 코드를 테스트해야합니다. 나는 두 가지 그러나 코드 범위가 1 다른 2 가지가 있습니다 놓칠수 지점 4의를 말한다 커버해야 null이 null이 아닌 두 값을 전달하고 내 테스트 경우assert groupType! = null은 어떻게 4 개의 분기를 포함합니까

public List<PatientGroup> findGroups(final String groupType) throws HwBaseAppException 
{ 
    assert groupType != null;//4 branches here 
    CriteriaBuilder criteriaBuilder=persistence.getCriteriaBuilder(); 
    CriteriaQuery<PatientGroup> query = criteriaBuilder.createQuery(PatientGroup.class); 
    Root<PatientGroup> patientGroupRoot = query.from(PatientGroup.class); 
    Predicate condition=criteriaBuilder.equal(patientGroupRoot.get(PatientGroup_.active), Boolean.TRUE); 
    Join<PatientGroup, GroupSubType> groupSubTypeRoot = patientGroupRoot.join(PatientGroup_.groupSubType); 
    Predicate condition1=criteriaBuilder.equal(groupSubTypeRoot.get(GroupSubType_.groupTypeCode), groupType); 
    query.where(condition,condition1); 
    query.orderBy(criteriaBuilder.asc(patientGroupRoot.get(PatientGroup_.name))); 
    TypedQuery<PatientGroup> tq = persistence.createQuery(query);  
    List<PatientGroup> collections = tq.getResultList(); 
    return initializeGroupRelationships(collections); 
} 

? 다음은 테스트 사례입니다.

@Test 
    public void testFindGroups_1() 
     throws HwBaseAppException 
    { 
     Mockito.when(persistence.getCriteriaBuilder()).thenReturn(criteriaBuilder); 
     Mockito.when(criteriaBuilder.createQuery(PatientGroup.class)).thenReturn(criteriaQuery); 
     Mockito.when(criteriaQuery.from(PatientGroup.class)).thenReturn(patientGroupRoot); 
     Mockito.when(patientGroupRoot.join(PatientGroup_.groupSubType)).thenReturn(groupSubTypeRoot); 
     Mockito.when(persistence.createQuery(Mockito.any(CriteriaQuery.class))).thenReturn(tq); 
     Mockito.when(tq.getResultList()).thenReturn(arrayList); 
     Mockito.when(arrayList.iterator()).thenReturn(iterator); 
     Mockito.when(iterator.hasNext()).thenReturn(true).thenReturn(false); 
     Mockito.when(iterator.next()).thenReturn(patientGroup); 
     groupServiceDAOImpl.findGroups("groupType");  
    } 
    @Test(expected=AssertionError.class) 
    public void testFindGroups_2() 
     throws HwBaseAppException 
    { 
     groupServiceDAOImpl.findGroups(null); 
    } 

답변

0

EclEmma 이클립스 플러그인은 자신의 차례에 바이트 코드를 분석 JaCoCo library을 사용하여 범위의 분석을 제공합니다. 이제 간단한 예를 보자 :

class Example { 
    void example(Object x) { 
    assert x != null; 
    } 
} 

과의 그 바이트 코드에 살펴 보자 :

javac Example.java 
javap -v Example 

다음과 같습니다 당신이 볼 수 있듯이

0: getstatic  #2     // Field $assertionsDisabled:Z 
3: ifne   18 
6: aload_1 
7: ifnonnull  18 
10: new   #3     // class java/lang/AssertionError 
13: dup 
14: invokespecial #4     // Method java/lang/AssertionError."<init>":()V 
17: athrow 
18: return 

-2 조건이 실제로 거기를 :

  1. 어설 션이 활성화되었습니다 (ifne)
  2. x하지 null (ifnonnull)

그리고 4 가능한 변종이다.

+0

(어설 션을 사용할 수있는 어설 션)에 대해 왼쪽 분기를 가져 오는 방법에 대한 도움을받을 수 있습니까? 입력에 따라 0을 인수로 전달했지만 도움이되지 않습니다. –

+0

@AviralSaxena Java에서 어설 션을 활성화/비활성화하는 방법은 http://docs.oracle.com/javase/7/docs/technotes/guides/language/assert.html#enable-disable을 참조하십시오. 테스트 및 코드 품질에 관해 말하면 -이 특별한 경우에는 모든 지점을 커버 할 필요가 없다는 것입니다. – Godin

+0

@AviralSaxena btw는 질문에 답하는 경우 upvote를 사용하여 답변을 수락하는 것을 잊지 마십시오. 감사. – Godin