2011-11-15 2 views
0

Eclipse의 CodePro는 JUnit 테스트를 생성하지만 체크 된 예외가 발생하지 않는 경우에도 Exception을 생성합니다. 이것이 CodePro의 한계입니까, 아니면 이전에 보지 못했던 훌륭한 JUnit 사례입니까? 예를 들어CodePro junit 테스트 메소드가 예외를 throw하는 이유는 무엇입니까 (Eclipse에서)?

는 : new Category(String)result.getCategoryName()은 포기하지

@Test 
public void testCategory_1() 
    throws Exception { 
    String categoryName = ""; 

    Category result = new Category(categoryName); 

    // add additional test code here 
    assertNotNull(result); 
    assertEquals(null, result.getCategoryName()); 
} 

는 예외를 확인했습니다.

+0

나는 이것에서 이점을 보지 못한다. – mkro

답변

2

위의 경우 문제없이 throw 예외를 제거 할 수 있습니다. 그러나 검사 된 Exception이있는 경우 Exception을 추가하면 코드를 훨씬 쉽게 관리 할 수 ​​있습니다. 대안 봐 :

@Test public static void testIt() { 
    try { 
     foobar(); // throws an IOException 
    } catch (Exception e) { 
     fail("caught an exception " + e.getMessage()); 
    } 
} 

을 반대 :

@Test public static void testIt() throws IOException { 
    foobar(); 
} 

의 JUnit은 (실제로 지정해 AssertionError로 구현됩니다) 어설 션 오류와 완전히 같은 예외를 처리에서 예기치 않은 예외가있는 경우 이렇게 귀하의 코드는 아마도 당신이 원하는 것입니다 실패한 테스트가 발생합니다. 그리고 귀하의 테스트가 훨씬 더 명확합니다.

예상되는 예외가있는 경우 @Test 주석에서이를 expectedException으로 지정하거나 TestRuleExpectedException을 사용하여 지정할 수 있습니다.

코드에서 예외를 검사 할 때 많이 사용합니다. 검사 된 모든 예외 목록이 아닌 throws Exception을 테스트 메소드에 추가하는 것이 훨씬 쉽습니다. 그래도 checkstyle 규칙에 위배됩니다 :

모범 사례? 오히려 허용되는 관행. 테스트 유지 관리가 훨씬 쉬우 며 코드가 약간 더 명확 해집니다.

0

예외를 throw 할 필요는 없으며 해당 분석 도구가 정적 분석을 수행하여 확인 된 예외가 발생했을 수 있는지 확인할 수 있습니다. 그러나 손으로 단위 테스트를 작성할 때 일반적으로 throw 절을 추가합니다. 예외적으로 체크 된 예외를 throw하는 코드 행을 추가하기 때문입니다.

1

확실히 제한 사항이 아닙니다. 단위 테스트를 작성할 때 실제로 종류 예외가 발생하지 않도록 신경 써야합니다. expected exceptions 이외의 경우 예외가 발생하면 빨간색 막대가 나타나 무언가가 정상이 아님을 나타냅니다. 따라서 "모두 포착"throws Exception 절이 있으면 충분합니다.

관련 문제