Написать тестовый пример JUnit для специально проверенного исключения в Java?
Я пишу тестовый пример для моего класса, в котором есть методы, которые выдают исключения (как проверенные, так и во время выполнения). Я пробовал различные возможные способы тестирования, как предлагается в этой ссылке., Похоже, они работают только для исключений времени выполнения. для проверенных исключений мне нужно сделать try / catch / assert, как показано в коде ниже. Есть ли альтернативы попробовать / 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") ;
}
}
}
1 ответ
Решение
@Test(expected = MyException.class)
public void testMethod2() throws MyException {
u.method2(9);
}