junitにおける異常テストのまとめ
1997 ワード
junitで異常テストのまとめには、以下の方法があります.
次のクラスがあると仮定します.
テストを行うには、方法1:
ExpectedExceptionの使用:
この方法では、例外のメッセージを指定できます.
2)@Test注記の使用
この方法では断言の異常情報を指定できない
3) try-catch
次のクラスがあると仮定します.
public class Person {
private final String name;
private final int age;
/**
* Creates a person with the specified name and age.
*
* @param name the name
* @param age the age
* @throws IllegalArgumentException if the age is not greater than zero
*/
public Person(String name, int age) {
this.name = name;
this.age = age;
if (age <= 0) {
throw new IllegalArgumentException('Invalid age:' + age);
}
}
}
テストを行うには、方法1:
ExpectedExceptionの使用:
import static org.hamcrest.Matchers.*;
import static org.junit.Assert.*;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.ExpectedException;
public class PersonTest {
@Rule
public ExpectedException exception = ExpectedException.none();
@Test
public void testExpectedException() {
exception.expect(IllegalArgumentException.class);
exception.expectMessage(containsString('Invalid age'));
new Person('Joe', -1);
}
}
この方法では、例外のメッセージを指定できます.
2)@Test注記の使用
@Test(expected = IllegalArgumentException.class)
public void testExpectedException2() {
new Person('Joe', -1);
}
この方法では断言の異常情報を指定できない
3) try-catch
@Test
public void testExpectedException3() {
try {
new Person('Joe', -1);
fail('Should have thrown an IllegalArgumentException because age is invalid!');
} catch (IllegalArgumentException e) {
assertThat(e.getMessage(), containsString('Invalid age'));
}
}