написать тестовый пример JUnit для пользовательского проверенного исключения в Java?

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

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") ;
        }
    }
}

person brain storm    schedule 02.12.2013    source источник


Ответы (1)


person    schedule
comment
почему у меня должны быть броски MyException, когда у меня есть декоратор @test(expected=MyException.class)`. - person brain storm; 03.12.2013
comment
@user1988876 user1988876 - потому что компилятор Java ничего не знает об аннотациях junit и их значении. - person jtahlborn; 03.12.2013