자바 에서 이상 을 테스트 하 는 다양한 방식
18444 단어 자바
이러한 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())); }
첫 번 째 는 가장 촌 스 러 운 자라 이 고, 두 번 째 는 가장 간결 하 며, 네 번 째 는 가장 믿 을 만하 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.