Dev

[Next Step] 자바 웹프로그래밍 2.1,2.2 정리

VIPeveloper 2022. 8. 22. 15:36
728x90
반응형

2.1 main() 메소드를 활용한 테스트의 문제점, 2.2 Junit을 활용해 main() 메소드 문제점 극복을 정리해보았습니다.

 

학습 목표

  • 문제점과 해결방식에 초점을 맞추어 정리했습니다.
  • 문제점이 무엇인지 아는 상태에 도달하기 위해 노력했습니다.

 

1. 프로덕션 코드와 테스트코드(main()) 이 같은 클래스에 위치하고 있다.

public class Calculator{
	...
}
public static void main(String[] args){
	Calculator cal = new Calculator();
	cal.add(1,2);
	cal.sub(1,2);
}
  • 프로덕션 코드와 테스트 코드를 분리하자
public class Calculator{
	...
}

분리!

public static void main(String[] args){
	Calculator cal = new Calculator();
	cal.add(1,2);
	cal.sub(1,2);
}

2. main() 메소드 하나에서 프로덕션 코드의 여러메소드들을 동시에 테스트하고 있다.

public static void main(String[] args){
	Calculator cal = new Calculator();
	cal.add(1,2);
	cal.sub(1,2);
}

 

  • 테스트 코드를 각 메소드별로 분리하자.
public static void main(String[] args){
	Calculator cal = new Calculator();
	methodAdd(cal);
	methodSub(cal);
}

public void methodAdd(Calculator cal){
	cal.add(1,2);
}
public void methodSub(Calculator cal){
	cal.sub(1,2);
}

3. 클래스가 가지고 있는 모든 메소드에 관심있는게 아니라 현재 내가 구현하고 있는 메소드에만 집중하고 싶다.

  • 테스트하는 메소드만 남기고 다른 메소드를 주석처리하는 것도 좀 이상하다.
  • 테스트 결과는 할때마다 내가 콘솔로 직접 봐야한다.. 이것도 좀 불편합니다.

해결하기

  • 결과값을 눈이 아닌 프로그램을 통해 자동화하면 된다.
  • Junit을 이용하여 테스트를 진행하자.
  • 테스트하는 메소드만 남기고 다른 메소드를 주석처리하는 것도 좀 이상하다.
    • 다른 메소드의 영향 없이 내가 현재 구현하고있는 프로덕션 코드에 집중 가능하다.
  • 테스트 결과는 할때마다 내가 콘솔로 직접 봐야한다.. 이것도 좀 불편합니다.
    • assertEquals(), assertTrue() 등으로 결과확인을 눈으로 확인하지 않아도 된다.
public class CalculatorTest{
	@Test
	public void add(){
		Calculator cal = new Calculator();
		assertEquals(3,cal.add(1,2));
	}
}

 

4. 중복 코드를 제거하고 싶다.

  • @BeforeEach, @AfterEach 를 적극 활용하자.
public class CalculatorTest{
	private Calculator cal;
    
	@Before
	public void setUp(){
		cal = new Calculator();
	}
    
	@Test
	public void add(){
		assertEquals(3,cal.add(1,2));
	}
	@Test
	public void sub(){
		assertEquals(3,cal.sub(4,1));
	}
}
728x90
반응형