테스트 주도 개발

바퀴달린 개발자·2021년 11월 22일
0

TDD

목록 보기
1/3

Ch1. 테스트 주도 개발

기존의 소프트웨어 개발 방식은 개발자 자신의 두뇌에 상당 부분 의존하고 있다.
'작성자의 판단'에 근거한 개발은 오류를 불러올 가능성이 크다.
또한, 시간이 지나 코드의 크기가 커지면 커질 수록 버그 수정에 필요한 부분을 찾아내기 어려울 것이다.
정리하자면, 전통적인 개발 및 테스트에서는 이런 문제점을 볼 수 있다.

  1. 특정 모듈의 개발 기간이 길어질수록 개발자의 목표의식이 흐려진다.
  2. 작업 분량이 늘어날수록 확인이 어려워진다.
  3. 논리적 오류를 찾기가 어렵다.
  4. 코드의 사용 방법과 변경 이력을 개발자의 기억력에 의존하게 되는 경우가 많다.
  5. 테스트 케이스가 적혀 있는 엑셀 파일을 보며 매번 테스트를 실행하는게 점점 귀찮아져서는 점차 간소화 하는 항목들이 늘어난다.
    등등,,

TDD, 테스트 주도 개발이란 무엇일까?

프로그램을 작성하기 전에 테스트를 먹저 작성하는 것

테스트 주도 개발의 목표는 '잘 동작하는 깔끔한 코드'이다. 정상적으로 동작하는 코드만을 목표로 삼지 않고, 작성된 코드도 명확한 의미를 전달할 수 있게 작성돼야 한다.

그렇다면, 테스트 주도 개발의 진행 방식은 어떻게 될까?

  1. 질문 : 테스트 작성을 통해 시스템에 질문한다.
  2. 응답: 테스트를 통과하는 코드를 작성해 질문에 응답한다.
  3. 정제: 아이디어를 통합하고, 불필요한 것은 제거하고, 모호한 것은 명확히 해서 대답을 정제한다.(리팩토링)
  4. 반복: 다음 질문을 통해 대화를 계속 진행한다.

Junit5 시작하기(maven)

pom.xml에 해당 디펜던시들을 추가해준다.

<dependency>
  <groupId>org.junit.platform</groupId>
  <artifactId>junit-platform-launcher</artifactId>
  <version>1.7.1</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.junit.jupiter</groupId>
  <artifactId>junit-jupiter-engine</artifactId>
  <version>5.7.1</version>
  <scope>test</scope>
</dependency>
<dependency>
  <groupId>org.junit.vintage</groupId>
  <artifactId>junit-vintage-engine</artifactId>
  <version>5.7.1</version>
  <scope>test</scope>
</dependency>

은행 계좌 관련 테스트 코드 만들기

기능

  1. 클래스 이름은 Account
  2. 기능은 세가지
  • 잔고 조회
  • 입금
  • 출금
@SpringBootTest
class AccountText {

	private Account account;

	@Before
	public void setup() {
		account = new Account(10000);
	}

	@Test
	void testGetBalance(){
		assertEquals(10000, account.getBalance());
	}


	@Test
	void testDeposit(){
		account = new Account(10000);
		account.deposit(1000);
		Assertions.assertEquals(11000, account.getBalance());
	}

	@Test
	void testWithdraw(){
		account = new Account(10000);
		account.withdraw(1000);
		Assertions.assertEquals(9000, account.getBalance());
	}
}

꿀팁

클래스 설계 시 속성을 먼저 고려해야할까?

-> 클래스에서 중요한 것은 속성이 아니라 동작이다.

부끄러운 테스트 케이스?

-> 일반적으로 생성자 메소드에서 특별한 업무 로직을 처리하지 않는다면 굳이 테스트 케이스를 작성하지 않아도 무방하다.

참고

https://repo.yona.io/doortts/blog/issue/2

0개의 댓글