일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 문법 정리
- spring
- 자바 프로젝트
- 프로젝트
- 리눅스
- 학점
- c#
- 파이썬
- JVM
- gradle
- 오라클 디비
- SQL
- auto configure
- resilience4j
- 초대장
- smart cast
- jsp
- MongoDB
- 파이썬 소스
- K6
- 티스토리
- 오라클
- oracle
- hyperledger
- 유사코드
- dynamic query
- 알고리즘
- 자바
- 백준 알고리즘
- 운영체제
- Today
- Total
모종닷컴
테스트 코드는 버그를 찢어 본문
오늘의 주제는 테스트 코드를 적절하게 이용해서 버그를 예방하기입니다. (물론 아닐 수도 있지만..) 대개 테스트 코드를 작성하는 이유는 지속적으로 내가 만든 코드가 정상 동작하는지를 체크하기 위함일 겁니다. 하지만 이 외에도 테스트 코드는 정말 유용하게 사용할 수 있습니다.
제약을 테스트 코드로
예시를 좀 들어보겠습니다. A 서버에는 Food라는 Enum 클래스가 존재합니다. B 서버에서는 A 서버의 이넘 클래스 정보를 가져와 외부에 등록을 한다고 합니다. 이때 외부에 등록하는 것이다 보니 사이즈나 길이 등의 제약이 존재하게 되었습니다. 최대 10자까지 등록할 수 있다고 하네요. 이러한 상황을 알고 있는 개발자가 Food안에 있는 Enum 값을 모두 10자리 미만으로 만들도록 하였고 주석도 잘 달아주었습니다. 그리고 시간이 지나 해당 개발자가 퇴사한 이후 다른 개발자가 주석을 제대로 보지 못하고 Food에 SPAGHETTI_WITH_CLAMS를 추가해버렸습니다. 해당 코드가 운영에 반영이 되고 나서 B 서버에서 A 서버로부터 받아온 데이터를 외부에 등록하다가 실패합니다.
위와 같은 상황처럼 이러한 제약들은 어플리케이션에서 알 수가 없고, 사람이 매번 이를 인지하고 개발을 할 수는 없는 노릇입니다. 이런 제약에 대한 문제를 테스트 코드로 짜게 되면 이러한 일들을 미연에 방지할 수 있게 됩니다.
enum class Food {
PASTA,
CHICKEN,
PIZZA,
SPAGHETTI_WITH_CLAMS;
}
class FoodTest {
@Test
fun `Food의 값의 길이는 10자리를 넘으면 안됩니다`() {
assertTrue(Food.values().none { it.name.length > 10 })
}
}
위와 같이 테스트 코드를 짜 놓으면 빌드가 실패할 테니 개이득입니다.
코딩 컨벤션도 챙기기
개발팀 내에 코딩 컨벤션이 존재할 겁니다. 위와 마찬가지로 우리는 사람이고 이 코딩 컨벤션을 잘 모르는 새로 들어온 개발자나 신입 개발자들은 실수할 수 있습니다. 예를 들어 Controller 클래스에는 반드시 Profile을 지정해야 한다고 가정해봅시다. 이걸 문서나 다른 어딘가에 정리해놓아도 안보는 사람은 분명 안 봅니다. 그렇다면 이걸 누가 챙기나요? 넵 테스트 코드가 해결해줄 수 있습니다.
코드가 개판인데 그냥 봐주세요!
@Test
fun test(){
val controllerClass = ReflectionUtils.findAllClassesInPackage(
"com.tistory.monny",
ClassFilter.of { c -> c.name.endsWith("Controller") && !c.isAnnotationPresent(Profile::class.java)}
)
assertEquals(0, controllerClass.size)
}
지금 당장 생각나는 용도가 위의 두 가지 뿐이지만 테스트 코드를 잘만 이용한다면 무궁무진하게 개발자의 실수를 줄여줄 수 있다고 생각합니다. 오늘도 읽어주셔서 감사합니다!
'Programming' 카테고리의 다른 글
Github에 파일 크기 및 리포지토리 크기 제한 (0) | 2022.08.05 |
---|---|
코틀린에서 소수 다루기 (0) | 2022.08.04 |
Intellij Code Inspection 사용하기 (0) | 2022.07.24 |
우린 서로 다른 버전을 바라보고 있었어..(with 테이블과 엔티티) (0) | 2022.07.20 |
Batch Update 3편 (0) | 2022.05.07 |