자바 에서 이상 을 테스트 하 는 다양한 방식

18444 단어 자바
JUnit 을 사용 하여 자바 코드 의 이상 을 테스트 하 는 방법 은 여러 가지 가 있 습 니 다. 몇 가 지 를 아 십 니까?
이러한 class 를 지정 합 니 다.
Person.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class Person {   private String name;  private int age;   public String getName() {  return name;  }   public void setName(String name) {  this.name = name;  }   public int getAge() {  return age;  }   public void setAge(int age) {   if (age < 0 ) {  throw new IllegalArgumentException("age is invalid");  }  this.age = age;  } } 

setAge 방법 을 테스트 해 보 겠 습 니 다.
Try - catch 방식
1
2
3
4
5
6
7
8
9
10
11
 @Test  public void shouldGetExceptionWhenAgeLessThan0() {  Person person = new Person();  try {  person.setAge(-1);  fail("should get IllegalArgumentException");  } catch (IllegalArgumentException ex) {  assertThat(ex.getMessage(),containsString("age is invalid"));  }   } 

이것 은 가장 생각 하기 쉬 운 방식 이지 만 너무 수다스럽다.
JUnit 주석 방식
JUnit 에 서 는 이상 을 검사 하기 위해 하나의 expected annotation 을 제공 했다.
1
2
3
4
5
6
 @Test(expected = IllegalArgumentException.class)  public void shouldGetExceptionWhenAgeLessThan0() {  Person person = new Person();  person.setAge(-1);   } 

이런 방식 은 훨씬 간결 해 보이 지만 이상 한 소식 은 확인 할 수 없다.
ExpectedException rule
JUnit 7 이후 ExpectedException 라 는 Rule 을 제공 하여 이상 에 대한 테스트 를 실현 했다.
1
2
3
4
5
6
7
8
9
10
11
12
 @Rule  public ExpectedException exception = ExpectedException.none();   @Test  public void shouldGetExceptionWhenAgeLessThan0() {   Person person = new Person();  exception.expect(IllegalArgumentException.class);  exception.expectMessage(containsString("age is invalid"));  person.setAge(-1);   } 

이런 방식 은 이상 유형 을 검사 할 수도 있 고 이상 한 정 보 를 검증 할 수도 있다.
catch - exception 라 이브 러 리 사용 하기
catch - exception 라 이브 러 리 가 있어 도 이상 에 대한 테스트 를 할 수 있 습 니 다.
우선 이 라 이브 러 리 를 참조 하 십시오.
pom.xml
1
2
3
4
5
6
 <dependency>  <groupId>com.googlecode.catch-exception</groupId>  <artifactId>catch-exception</artifactId>  <version>1.2.0</version>  <scope>test</scope> <!-- test scope to use it only in tests -->  </dependency> 

그리고 이렇게 테스트 를 쓴다.
1
2
3
4
5
6
7
8
 @Test  public void shouldGetExceptionWhenAgeLessThan0() {  Person person = new Person();  catchException(person).setAge(-1);  assertThat(caughtException(),instanceOf(IllegalArgumentException.class));  assertThat(caughtException().getMessage(), containsString("age is invalid"));   } 

이런 장점 은 이상 이 다른 방법 이 아 닌 측정 방법 에 의 해 던 져 진 것 임 을 정확하게 검증 할 수 있다 는 것 이다.
catch - exception 라 이브 러 리 는 다양한 API 를 제공 하여 테스트 를 진행 합 니 다.
fest - assertion 라 이브 러 리 를 먼저 불 러 옵 니 다.
1
2
3
4
5
 <dependency>  <groupId>org.easytesting</groupId>  <artifactId>fest-assert-core</artifactId>  <version>2.0M10</version>  </dependency> 

그리고 BDD 스타일 테스트 를 쓸 수 있 습 니 다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 @Test  public void shouldGetExceptionWhenAgeLessThan0() {  // given  Person person = new Person();   // when  when(person).setAge(-1);   // then  then(caughtException())  .isInstanceOf(IllegalArgumentException.class)  .hasMessage("age is invalid")  .hasNoCause();  } 

Hamcrest 스타일 의 검증 스타일 을 좋아한다 면 catch - exception 도 해당 하 는 Matcher API 를 제공 합 니 다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 @Test  public void shouldGetExceptionWhenAgeLessThan0() {  // given  Person person = new Person();   // when  when(person).setAge(-1);   // then  assertThat(caughtException(), allOf(  instanceOf(IllegalArgumentException.class)  , hasMessage("age is invalid")  ,hasNoCause()));  } 

첫 번 째 는 가장 촌 스 러 운 자라 이 고, 두 번 째 는 가장 간결 하 며, 네 번 째 는 가장 믿 을 만하 다.

좋은 웹페이지 즐겨찾기