[JUnit] 1.TDD 예제


TDD 예제



Jnit을 이용해서 간단한 TDD 예제를 해보겠습니다!


만약 1부터 20까지의 수를 출력하는 프로그램을 작성하는데, 3의 배수는 “A” 7의 배수는 “B” 나머지는 “C”를 출력하는 프로그램을 짠다고 합시다!

TDD를 이용하지 않는 개발자는 다음과 같이 바로 소스코드 작성 후 실행 테스트를 할 것입니다~


package example;

public class Example {

	public static void main(String[] args) {
		for(int i = 1; i <= 20; i++) {
			if(i % 3 == 0) {
				System.out.println("A");
			}else if(i % 7 == 0) {
				System.out.println("B");
			}else {
				System.out.println("C");
			}
		}
	}
}




image




TDD 방식으로 위의 프로그램을 작성해보겠습니다!


먼저, 테스트 요소를 분석합니다!

  • 숫자가 3의 배수일 때 A 반환


  • 숫자가 7의 배수일 때 B 반환


  • 나머지 숫자는 C 반환




그 다음 JUnit Test Case를 만들어줍니다!


image




테스트코드를 작성해줍니다!


//ExampleTest.java


import static org.junit.Assert.*;

import org.junit.Test;
import org.junit.runner.RunWith;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

import junit.framework.Assert;

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("file:src/main/webapp/WEB-INF/spring/**/root-context.xml")
public class ExampleTest {
	
	//3의 배수인 6을 넣으면 A가 나와야함
	@Test
	public void testJUnit() {
		JUnitExample je = new JUnitExample();
		String valueExpected = "A";
		String result = je.test(6);
		assertEquals(valueExpected, result);
	}
	//7의 배수인 14를 넣으면 B가 나와야함
	@Test
	public void testJUnit2() {
		JUnitExample je = new JUnitExample();
		String valueExpected = "B";
		String result = je.test(14);
		assertEquals(valueExpected, result);
	}
	//3의 배수와 7의 배수가 아닌 16을 넣으면 C가 나와야함
	@Test
	public void testJUnit3() {
		JUnitExample je = new JUnitExample();
		String valueExpected = "C";
		String result = je.test(16);
		assertEquals(valueExpected, result);
	}

}




테스트 해볼까요??


image



당연히 에러가 납니다~!

JUnitExample이라는 클래스를 저희가 만든 적이 없었죠??

이렇게 TDD 방식은 먼저 테스트부터 만들어 놓습니다.


그러면 이제 실제로 JUnitExample 클래스와 test 메소드를 구현해보겠습니다!


//JUnitExample.java


public class JUnitExample {
	public String test(int i) {
		if(i % 3 == 0) {
			return "A";
		}else if(i % 7 == 0) {
			return "B";
		}else {
			return "C";
		}
	}
}



그러고 다시 아까 테스트를 진행해보겠습니다!


image




와우 테스트가 모두 성공했네요! -> 소스 검증이 완료되었습니다~

원래 단위테스트는 @Ignore를 사용해서 하나씩 해결해가는 것이 정석이나 한꺼번에 해결했습니다~!


마지막으로 개발된 기능을 적용시킵니다!


//Program.java


public class Program {
	public static void main(String[] args) {
		JUnitExample je = new JUnitExample();
		for(int i = 1; i <= 20; i++) {
			System.out.println(je.test(i));
		}
	}
}




어때요? TDD 프로세스를 따르면 결론적으로 질 높고 모듈화된 소스코드를 짜게됩니다~!

처음엔 어렵겠지만 앞으로 개발을 TDD 방식으로 하려고 노력해야겠습니다!