티스토리 뷰
2장 문자열 계산기 구현을 통한 테스트와 리팩토링
이 내용은 위 책의 내용을 공부하기 위해 정리한것입니다.
왜 테스트를 따로 구현할까?
main()메소드에 구현하면 생기는 문제점
- 배포시에 필요가 없지만 함께 배포된다. (배포시 코드를 제거해주는 작업을 해줘야한다)
- 하나의 main()에서 여러가지 테스트를 동시에 진행하면 복잡도가 상승한다.
- 테스트 관심사에 따라 method로 분리하더라도 일일이 테스트하고자 하는 메소드만 선택해야 하는것도 불합리함
- 테스트의 출력결과를 미리 예상한 결과와 수동으로 비교해야함.
java project에서 junit 추가하기
Java project를 최초 생성하면 JUnit이 class path에 추가되어있지 않아서 테스트를 실행할 수 가 없다.
project-properties-Java Build Path-Libraries-Add Library...
JUnit을 추가해준다 책이 발간됐을 기준으로 JUnit4가 최신버전으로 현재는 JUnit5까지 나와있다.
라이브러리를 추가해주면 프로젝트 폴더에 JUnit이 추가된걸 확인할 수 있다.
@Before
각 테스트에서 공통으로하는 작업을 줄이기 위해 (ex 객체 초기화) Test class의 멤버 변수로 변경할 수 있습니다. 이때 초기화 작업은 @Before 어노테이션을 통해 해주는것이 좋습니다. 만약 멤버변수를 선언하면서 초기화 하면 이후 테스트가 진행되면서 멤버변수의 상태값을 변경하면 다른 테스트에까지 영향이가서 단위테스트가 제대로 되지않기 때문입니다.
Tip!
F11을 누르면 TEST를 실행시킬수 있습니다.
RuntimeException이 발생하는지 체크하는 테스트
@Test(expected = RuntimeException.class)
좋은 소스코드를 만들기 위한 여정
요구조건에 부합하는 코드를 만든 뒤 끝이 아니라 리팩토링을 하는 과정을 거친다. 리팩토링은 소스의 가독성을 높히고 유지보스를 편하게 하기 위해 소스코드의 구조를 변경하는것으로 기능상의 결과가 변경되서는 안된다.
아래의 요구사항을 지키면서 동작하도록 해야하는걸 목표로 한다.
- 메소드가 한 가지 책임만 가지도록 구현한다.
- 인덴트(indent, 들여쓰기) 깊이를 1단계로 유지한다.
- else를 사용하지 않는다.
대부분의 개발자는 개발 후 테스트코드를 작성하고 통과하면 끝내버리지만 거기서 끝이 아니라 리팩토링을 할 부분이 있는지 체크해야함
추가 학습 자료
테스트 주도 개발: 고품질 쾌속개발을 위한 TDD 실천법과 도구 1장 공개자료
https://goo.gl/2ny56W
'프로그래밍 언어 > Java Programming' 카테고리의 다른 글
자바 프로그래밍 Next Step 4장 (0) | 2021.03.19 |
---|---|
자바 프로그래밍 Next Step 3장 (0) | 2021.03.17 |
JAVA Checked Exception, Runtime Exception (0) | 2021.02.25 |
객체지향 프로그래밍 OOP 5대원칙 SOLID (0) | 2021.02.25 |
파일 확장자 또는 파일명만 추출하기 (0) | 2020.06.05 |