TDD - JUnit5 ) Assertion

하우르·2021년 10월 25일
0

TDD

목록 보기
3/5

assertEquals();

assertEquals(예상 값, 실제 값, 에러메세지)

Study.class

package junit;

public class Study {
	private StudyStatus status = StudyStatus.DRAFT;
	public StudyStatus getStatus() {
		// TODO Auto-generated method stub
		return this.status;
	}

}

StudyStatus.class

package junit;

public enum StudyStatus {
	DRAFT, STARTED, ENDED;
}

StudyTest.class

class StudyTest {

	@Test
	@DisplayName("스터디 만들기")
	void create_new_study() {
		Study study = new Study();
		assertNotNull(study);
		assertEquals(StudyStatus.DRAFT, study.getStatus(), ()->"Study 처음 값은 DRAFT여야 한다.");
	}

assertAll();

assertAll 사용 전

Study.class

package junit;

public class Study {
	private StudyStatus status;
	private int limit;

	public Study(int limit) {
		this.limit = limit;
	}

	public StudyStatus getStatus() {
		// TODO Auto-generated method stub
		return this.status;
	}

	public int getLimit() {
		// TODO Auto-generated method stub
		return this.limit;
	}
}

StudyStatus.class

package junit;

public enum StudyStatus {
	DRAFT, STARTED, ENDED;
}

StudyTest.class

class StudyTest {

		@Test
	@DisplayName("스터디 만들기")
	void create_new_study() {
		Study study = new Study(-10);
		assertNotNull(study);
		assertEquals(StudyStatus.DRAFT, study.getStatus(), ()->"Study 처음 값은 DRAFT여야 한다.");
		assertTrue(study.getLimit()>0, ()->"스터디 최대 참석 가능 인원은 0보다 커야한다.");
	}

결과 값

이때 assertTrue도 실패해야 하지만 앞선 assertEquals가 실패라서
assertTrue의 실패 여부를 알려주지 않는다.

assertAll 사용 후

StudyTest.class

class StudyTest {

	@Test
	@DisplayName("스터디 만들기")
	void create_new_study() {
		Study study = new Study(-10);
		assertAll(
				()->assertNotNull(study),
				()->assertEquals(StudyStatus.DRAFT, study.getStatus(),
						()->"Study 처음 값은 DRAFT여야 한다."),
				()->assertTrue(study.getLimit()>0, ()->"스터디 최대 참석 가능 인원은 0보다 커야한다.")

		);
	}
}

결과 값

assertThrows()

Study.class

package junit;

public class Study {
	private StudyStatus status;
	private int limit;

	public Study(int limit) {
		if(limit<0) {
			throw new IllegalArgumentException("limit은 보다 커야한다.");
		}
		this.limit = limit;
	}

	public StudyStatus getStatus() {
		// TODO Auto-generated method stub
		return this.status;
	}

	public int getLimit() {
		// TODO Auto-generated method stub
		return this.limit;
	}
}

StudyTest.class

class StudyTest {

	@Test
	@DisplayName("스터디 만들기")
	void create_new_study() {
		assertThrows(IllegalArgumentException.class, () -> new Study(-10));
	}
}

결과

예상한 예외 값이므로 테스트는 성공이다.

AssertTimout

class StudyTest {

	@Test
	@DisplayName("스터디 만들기")
	void create_new_study() {
		assertTimeout(Duration.ofMillis(100), () -> {
			new Study(10);
			Thread.sleep(300);
		});
	}
}

결과

예상 시간보다 타임아웃이기 때문에 테시트는 실패이다.

profile
주니어 개발자

0개의 댓글