1. 테스트 클래스와 메서드가 생길 때 마다 메인 메서드에 직접 코드를 추가해야 하고, 그럴수록 메인 메서드가 계속 커진다.
테스트 메서드를 개별적으로 실행하기도 어렵다.
2. 테스트가 실패한 경우 어떤 값이 나오길 기대하였고, 어떤 잘못된 값이 들어와 실패했는지 알 수 없는 단점이 존재함.
그리고 예외를 던지거나, try catch를 사용해야 하는 등 직접 구현해야 할 부분이 많아 불편하다.
3. 테스트 메서드별로 공통적으로 실행되어야 하는 기능이 있다면, 프레임워크 없이 수동으로 작성하면 메서드마다 중복이 생김. (아래 예시 코드에서는 Calculator 생성하는 var calculator = Calculator(5) 부분 중복 발생)
아래는 코틀린으로 작성한 수동 예시 코드 ( 프레임워크 없이 메인 메서드에서 작성한 테스트 메서드 직접 수행함)
package com.group.libraryapp.calculator
fun main(){
val calculatorTest = CalculatorTest()
calculatorTest.addTest()
calculatorTest.minusTest()
calculatorTest.multiplyTest()
calculatorTest.divideTest()
}
class CalculatorTest{
fun addTest(){
// given
val calculator = Calculator(5)
// when
calculator.add(3)
// then
if (calculator.number != 8){
throw IllegalStateException()
}
}
fun minusTest(){
// given
val calculator = Calculator(5)
// when
calculator.minus(3)
// then
if (calculator.number != 2){
throw IllegalStateException()
}
}
fun multiplyTest(){
// given
val calculator = Calculator(5)
// when
calculator.multiply(3)
// then
if (calculator.number != 15){
throw IllegalStateException()
}
}
fun divideTest(){
// given
val calculator = Calculator(5)
// when
calculator.divide(2)
// then
if (calculator.number != 2){
throw IllegalStateException()
}
}
fun divideExceptionTest(){
// given
val calculator = Calculator(5)
// when
try{
calculator.divide(0)
} catch (e: IllegalArgumentException){
// 테스트 성공
return
} catch (e: Exception){
throw IllegalStateException()
}
throw IllegalStateException("기대하는 예외가 발생하지 않았습니다.")
}
}
JUnit @Test 붙였을 때랑 비교하면 // then 에 해당하는 결과 비교하는 부문이 assert로 대체되어 있고, 테스트 메서드 호출을 main 함수가 아닌 프레임워크에서 실행해준다는 점이 다름.
@Test
fun addTest(){
// given
val calculator = Calculator(5)
// when
calculator.add(3)
// then
assertThat(calculator.number).isEqualTo(8)
}
'테스트 > 테스트코드' 카테고리의 다른 글
JUnit 5 기초 (Chapter 5) (0) | 2023.05.02 |
---|---|
JUnit5 관련 어노테이션이나 설정관련 설명 정리 (0) | 2023.04.19 |
스프링부트 각 계층 테스트 하는 방법 (0) | 2023.01.03 |
Junit5에서 사용되는 주요 어노테이션 (0) | 2023.01.03 |
테스트 코드 구성 항목 (0) | 2023.01.03 |
댓글