분류 전체보기

    [Unit Testing] 테스트의 Assert 종류 한 번에 정리하기

    테스트의 Assert의 종류 우리는 테스트를 진행할 때, 단언(Assert)을 통해 기대값과 실제 값을 비교한다. 단언의 기대값과 실제 값이 다르다면 테스트는 실패할 것이고, 같다면 성공한다. 이러한 단언은 단순하게는 객체의 함수를 호출하고 결과값을 받아 해당 값을 비교하는 것부터 시작해, 객체와의 상호 작용을 확인하는 단언들 또한 존재한다. 이번 글에서는 단언에 어떤 종류가 있는지를 알아봄으로써 각 테스트 상황에 맞는 단언을 사용할 수 있도록 한다. 함수의 결과를 확인하는 단언 우리가 다룰 첫 단언은 함수의 결과를 확인하는 단언이다. 함수의 결과를 확인하는 단언은 가장 간단한 단언으로, 입력값과 출력 값이 같아야 하기 때문에 인터페이스의 구현체가 달라지더라도 테스트는 변경될 필요가 없다. 예를 들어 다..

    Test Doubles란 무엇인가? Dummy, Stub, Fake, Spy, Mock 알아보기

    Test Doubles란 무엇인가? 테스트 대상 객체가 다른 객체와 의존성이 있는 경우를 생각해보자. 만약 객체를 테스트 하기 위해 의존성이 있는 객체에 대한 실제 구현체를 사용한다면, 의존성이 있는 객체의 구현체에 의해 테스트가 실패할 수 있다. 이런 경우 실제 구현체 대신 해당 객체의 동작을 모방하는 객체를 만들어 테스트에 영향이 없도록 만들어야 한다. 이 때 의존성 있는 객체의 동작을 모방하는 객체를 바로 Test Doubles라 부른다. Test Doubles를 사용하기 위한 환경 설정 Test Doubles를 사용하기 위해 다른 객체에 의존성이 있는 UserProfileFetcher 객체를 만들어보자. UserProfileFetcher은 UserRepository 객체로부터 유저의 이름(name..

    [Unit Testing] 유닛 테스팅이란 무엇인가?

    유닛 테스팅이 무엇인지 이해하기 위해서는 유닛이 무엇인지부터 알아야 한다. 유닛이란 무엇인가? 유닛 테스팅의 유닛이란 독립적인(isolated) 기능을 저장하는 컨테이너로, 독립적인 기능을 담는 함수나 클래스 혹은 모듈 모두가 유닛이 될 수 있다. 하지만, 객체 지향 프로그래밍(Object Oriented Programming)에서 유닛은 조금 더 명확한 의미를 가진다. 객체 지향 프로그래밍에서 기능에 대한 책임은 객체에 있으며, 따라서 일반적으로 기능을 담는 객체가 유닛이 된다. 기능을 담는 객체가 유닛이 된다는 것은 기능을 담지 않는 객체는 유닛이 되지 않는다는 뜻이며, Kotlin에서의 data class 나 Java의 POJO 등은 유닛이 되지 못한다. 유닛이 무엇인지 알았으면, 이제 유닛 테스팅..

    [JUnit5] Private 함수에 대한 테스트 방법

    private 함수 테스트 시 문제점 다음과 같은 양의 정수에 대해 곱셈을 실행하는 PositiveNumberMultiplier 클래스가 있다고 하자. 이 PositiveNumberMultiplier클래스는 정수를 가변인자로 받아 곱셈을 실행하는 multiplyAll 메서드를 가지고 있으며, multiplyAll메서드는 내부에서 가변인자로 들어온 모든 값이 양수인지 확인하는 isValid 함수를 가진다. class PositiveNumberMultiplier() { fun multiplyAll(vararg numbers: Int): Int { if (isValid(*numbers)) { throw IllegalArgumentException("인자는 양수여야 합니다") } return numbers.fo..

    [JUnit5] @ParameterizedTest와 @CsvFileSource 함께 사용해 대량 데이터 테스트 하기

    대량 데이터에 대한 테스트 필요성 모든 클래스가 클린 아키텍처를 기반으로 만들어지면 좋겠지만, 프로그램이 복잡해지고 많은 요구사항이 들어갈 수록 클래스의 함수가 점점 복잡해질 수 있다. 이런 경우 수 많은 테스트 케이스가 생기게 되는데, 이런 테스트를 위해 @ParameterizedTest와 @CsvFileSource를 함께 사용해 테스트를 진행할 수 있다. csv파일 준비하기 테스트를 위한 csv파일은 src/test/resources 경로에 넣으면 된다. SimpleMultiplierTestCase.csv 파일을 다음과 같이 만들어 resources 폴더 아래에 넣도록 하자. 그러면 CsvFileSource를 사용해 테스트 하기 위한 준비가 마쳐진다. 개인적으로 CsvFileSource를 사용할 때 ..