Java 프레임워크 만들기 - JSP

자바 JUnit의 fail, assert, assume 이해하기 - Java JUnit fail, assert, assume, 이클립스(Eclipse)

carrotweb 2021. 7. 6. 19:31
728x90
반응형

JUnit은 기본적으로 테스트 결과가 성공이라는 가정하에 실패인지 검사를 합니다.

그래서 JUnit에 있는 메서드들은

"fail(무조건 실패로 AssertionError가 발생하고 다음 라인부터 실행되지 않습니다.)"

"assert~(비교 검사나 조건이 실패하면 AssertionError가 발생하고 다음 라인부터 실행되지 않습니다.)"

"assume~(조건이 실패하면 AssumptionViolatedException이 발생하고 다음 라인부터 실행되지 않습니다.)"

만 있습니다.

테스트 케이스에서 "Error"나 "Exception"이 발생하면 테스트는 실패가 되고 실행을 중지합니다.

 

그래서 테스트 케이스에 "fail"이나 "assert~"가 없다면 무조건 성공으로 처리됩니다.

"fail()"메서드의 소스입니다.

public static void fail(String message) {
	if (message == null) {
		throw new AssertionError();
	}
	throw new AssertionError(message);
}

 

제일 많이 사용하는 "assertEquals()"메서드의 소스입니다.

public static void assertEquals(String message, Object expected, Object actual) {
	if (equalsRegardingNull(expected, actual)) {
		return;
	}
	if (expected instanceof String && actual instanceof String) {
		String cleanMessage = message == null ? "" : message;
		throw new ComparisonFailure(cleanMessage, (String) expected, (String) actual);
	} else {
		failNotEquals(message, expected, actual);
	}
}

private static void failNotEquals(String message, Object expected, Object actual) {
	fail(format(message, expected, actual));
}

 

"assumeThat()"메서드의 소스입니다.

public static <T> void assumeThat(String message, T actual, Matcher<T> matcher) {
	if (!matcher.matches(actual)) {
		throw new AssumptionViolatedException(message, actual, matcher);
	}
}

 

위에서 설명한 것을 테스트로 확인해보겠습니다.

1. 테스트 결과가 무조건 실패합니다.

@Test
public void test() {
	System.out.println("test 실행1");
	fail("Not yet implemented");

	System.out.println("test 실행2");
}

[Console]

setUpBeforeClass 실행
setUp 실행
test 실행1
tearDown 실행
tearDownAfterClass 실행

실패로 "fail()"메서드 다음 라인부터 실행되지 않았습니다.

 

2. 테스트 결과가 무조건 성공합니다.

@Test
public void test() {
	System.out.println("test 실행1");

	System.out.println("test 실행2");
}

[Console]

setUpBeforeClass 실행
setUp 실행
test 실행1
test 실행2
tearDown 실행
tearDownAfterClass 실행

 

3. 문자열 비교 검사가 성공하여 테스트 결과가 성공합니다.

@Test
public void test() {
	System.out.println("test 실행1");

	String test = "SimpleTest";
	assertEquals("SimpleTest", test);
	
	System.out.println("test 실행2");
}

[Console]

setUpBeforeClass 실행
setUp 실행
test 실행1
test 실행2
tearDown 실행
tearDownAfterClass 실행

 

 

4. 문자열 비교 검사가 실패하여 테스트 실패가 성공합니다.

@Test
public void test() {
	System.out.println("test 실행1");

	String test = "SimpleTest";
	assertEquals("SimpleTest1", test);

	System.out.println("test 실행2");
}

[Console]

setUpBeforeClass 실행
setUp 실행
test 실행1
tearDown 실행
tearDownAfterClass 실행

실패로 "assertEquals()"메서드 다음 라인부터 실행되지 않았습니다.

5. 문자열 비교 검사가 실패하여 테스트 실패가 성공합니다.

@Test
public void test() {
	System.out.println("test 실행1");

	String test = "SimpleTest";
	assertEquals("SimpleTest", test);

	assumeTrue(false);
	System.out.println("test 실행2");
}

[Console]

setUpBeforeClass 실행
setUp 실행
test 실행1
tearDown 실행
tearDownAfterClass 실행

테스트 성공했지만 "assumeTrue()"메서드가 실패하여 다음 라인부터 실행되지 않았습니다.

위의 테스트를 통해 JUnit의 메서드들에 대해 알아보았습니다.

이어서 실제 JUnit로 단위 테스트를 해보겠습니다.

728x90
반응형