2013-12-02 6 views
3

Я пишу тестовый пример для своего класса, у которого есть методы, которые генерируют исключения (как проверенные, так и исполняемые). Я пробовал различные возможные способы тестирования, как предлагалось в этом link.. Кажется, они работают только для исключений во время выполнения. для проверенных исключений мне нужно сделать try/catch/assert, как показано в приведенном ниже коде. Есть ли альтернатива try/catch/assert /. вы заметите, что testmethod2() and testmethod2_1() показывает ошибку компиляции, но testmethod2_2() не показывает ошибку компиляции, которая использует try/catch.Запись тестового примера JUnit для пользовательского проверенного исключения в Java?

class MyException extends Exception { 

    public MyException(String message){ 
     super(message); 
    } 
} 


public class UsualStuff { 

    public void method1(int i) throws IllegalArgumentException{ 
     if (i<0) 
      throw new IllegalArgumentException("value cannot be negative"); 
     System.out.println("The positive value is " + i); 
    } 

    public void method2(int i) throws MyException { 
     if (i<10) 
      throw new MyException("value is less than 10"); 
     System.out.println("The value is "+ i); 
    } 

    } 

испытаний Класс:

import static org.junit.Assert.*; 

import org.junit.Before; 
import org.junit.Rule; 
import org.junit.Test; 
import org.junit.rules.ExpectedException; 


public class UsualStuffTest { 

    private UsualStuff u; 

    @Before 
    public void setUp() throws Exception { 
     u = new UsualStuff(); 
    } 

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

    @Test(expected = IllegalArgumentException.class) 
    public void testMethod1() { 
     u.method1(-1); 
    } 

    @Test(expected = MyException.class) 
    public void testMethod2() { 
     u.method2(9); 
    } 

    @Test 
    public void testMethod2_1(){ 
     exception.expect(MyException.class); 
     u.method2(3); 
    } 

    public void testMethod2_3(){ 
     try { 
      u.method2(5); 
     } catch (MyException e) { 
      assertEquals(e.getMessage(), "value is less than 10") ; 
     } 
    } 
} 

ответ

15
@Test(expected = MyException.class) 
public void testMethod2() throws MyException { 
    u.method2(9); 
} 
+2

почему я должен бросками 'MyException' в то время как я имею @test (ожидаемый = MyException.class)' декоратора. –

+5

@ user1988876 - потому что компилятор java ничего не знает о аннотации junit и о том, что они означают. – jtahlborn

Смежные вопросы