2013-09-07 2 views
0

JUnit 테스트를 실행하여 예외를 throw하는 메서드를 테스트하려고합니다. 그러나 테스트가 실패하고 실패 이유에 대한 단서가 없습니다. 예외를 throw하는 메서드는 다음과 같습니다. calcultor.setN() ;. 나는이 테스트의 두 가지 버전을 만들었지 만, 통과해야하더라도 두 가지 모두 실패합니다.JUnit 예외 테스트가 실패합니다 (예기치 않게)

@Rule 
public ExpectedException exception = ExpectedException.none();  

@Test 
public void testSetNZero() { 
    exception.expect(IllegalArgumentException.class); 
    exception.expectMessage("Het aantal CPU's is minder dan 1"); 
    Amdahl calculator = new Amdahl(); 
    calculator.setN(0); 
    fail("Exception not thrown"); 
} 

@Test (expected = IllegalArgumentException.class) 
    public void testSetNZero() { 
    Amdahl calculator = new Amdahl(); 
    calculator.setN(0); 
} 

암달 클래스 :

public class Amdahl 
{ 
    private int N; 

    public void setN (int n) { 
    if(n < 1) throw new IllegalArgumentException ("Het aantal CPU's is minder dan 1"); 
    this.N = n; 
    } 
} 
+2

당신은 내가이 방법은 어떤 예외를 던질 않는 암달 클래스 – Reimeus

+0

은'Amdahl' 클래스를 게시 할 수 있습니까? '예외 '가 어떻게 선언됩니까? – Simon

+0

을 추가 한 – axtavt

답변

0

예외가 예상 될 때마다 try-catch 블록을 사용하여 문제를 해결했습니다. 예외가 없거나 잘못된 예외가 있으면 테스트가 실패합니다.

@Test 
public void testSetNZero() { 
    Amdahl calculator = new Amdahl(); 
    try{ 
     calculator.setN(0); 
     fail(); 
    } catch(IllegalArgumentException e){} 
} 
1

testSetNZero 실패 이유는

@Test (expected = IllegalArgumentException.class) 
public void testSetNZero() { 

@Rule 
public ExpectedException exception = ExpectedException.none(); 

모순 서로와 (항상 실패하는 테스트가 있어야 정의 둘 다 전을 던지다. 또한 통과를 위해서가 아니라). ExpectedException또는@Test(expected = ...)을 사용하십시오.

+0

테스트 중에 @Test (expected = IllegalArgumentException.class) 테스트를 할 때의 규칙을 포함하여 메소드 중 하나를 주석으로 처리하는 방법 중 하나 – Simon

+0

테스트를 수행하지 않고 둘 다 사용할 수 있습니다. –

+0

다음 코드를 게시하십시오. JUnit 4 테스트 러너를 사용하고 있는지 확인하십시오. – Joe

관련 문제