2012-03-15 3 views
1

저는 EclEmma를 사용하여 필자가 작성한 테스트 클래스 (JUnit 테스트)의 적용 범위를 테스트하고 있습니다. -ea을 사용하여 Java에서 어설 션을 활성화했습니다. Java의 어설 션을 사용했던 커버 리지 테스트를 실행 한 후에 (실제로 테스트 코드가 아닌 실제 코드에서) 가지의 y이 누락되었다고합니다. 모든 지점을 어떻게 커버 할 수 있습니까? 내가 뭘 잘못하고 있니?JUnit 및 EclEmma 테스트에서 분기가 누락되었습니다.

+0

어설 션없이 제대로 작동합니까? – hidralisk

+0

Java 어설 션을 해제하면 -ea 인수를 제거 할 때 적용 범위가 훨씬 줄어 듭니다. 내 테스트 클래스는 노란색으로 표시된 Java 어설 션과 내가 질문 한 메시지를 제외한 모든 것을 다룹니다. – Loolooii

답변

2

어설 션을 사용하지 않도록 설정할 때 왜 더 낮은 적용 범위가 필요한지 묻고 싶습니다. 컴파일러가 어설 션을 위해 새 분기를 삽입하기 때문에 이런 현상이 발생합니다. 이 예제를 고려하십시오

assert x > 0; 

컴파일러를

if (assertions are enabled) { 
    if (! x > 0) 
     throw new AssertionViolatedException() 
    } 
} 

이, 당신의 코드에 지점을 추가로 대략 대응하고 주장의 전원을 켤 때 그 중 어느 것도 실행되지 코드를 삽입합니다. 이는 커버리지 비율을 떨어 뜨릴 것이지만, 이것은 컴파일러가 생성 한 코드를 참조하기 때문에 커다란 문제는 아닙니다.

+0

어설 션이 활성화 된 시점에 관한 질문이었습니다. – hidralisk

+0

제 질문은 왜 내 테스트 코드가 실패했는지입니다. 그리고 어설 션이 활성화되면 발생합니다. – Loolooii

+0

OK, 이해할 수 있도록 질문을 다시 말하십시오. '-ea- 플래그로 테스트를 실행합니다. 무슨 일이야? 그런 다음 '-ea'플래그없이 테스트를 실행합니다. 무슨 일이야? – Jochen

관련 문제