단위 테스트를 하기 위해서는 한 번에 메서드 하나만을 실행해보아야 한다. 그런데 이러한 메서드가 네트워크, DB 등 제어하기 어려운 것들에 의존하고 있다면 어떻게 단위테스트를 해야할까? 이러한 부분을 돕기위해 Mock이라는 것이 등장했다. Mock 실제 객체를 만들어 사용하기에 시간, 비용 등의 Cost가 높거나 혹은 객체 서로간의 의존성이 강해...
Mock 그리고 Mockito, BDDMockito
불변 컬렉션의 내부 변환 문제?
아래 코드를 보자. public class Cars { private List<Car> cars; public Cars(List<Car> cars) { this.cars = cars; } public Collection<Car> getCars() { return Col...
소프트웨어 개발 3대 원칙 - KISS, YAGNI, DRY
좀 더 품질 좋은 소스 코드를 작성하기 위해 알고, 따르면 좋은 원칙들이 있다. 대표적으로 KISS, YAGNI, DRY 3가지를 들 수 있다. KISS (Keep It Simple Stupid) KISS 원칙은 “Keep It Simple Stupid!”, “Keep It Short and Simple!”, “Keep It Small and Si...
ParameterizedTest, private 메서드의 테스트에 관해
@ParameterizedTest JUnit에서 여러 값에 대한 테스트를 작성하기 위해 @ParameterizedTest 라는 애노테이션을 제공한다. 기본적인 사용 방법은 @Test 대신 @ParamaterizedTest 애노테이션을 사용하는 것이다. 이 때 파라미터로 넘겨줄 값들을 지정해주어야 한다. 아래 그 방법들을 보자. @ValueSour...
생성자 대신 정적 팩토리 메서드를 고려하자.
보통 개발에 있어 public 생성자를 자주 사용하게 된다. 이펙티브 자바에서는 이러한 public 생성자보다 정적 팩토리 메서드를 사용하면 행복한 상황들이 일어난다고 한다. 정적 팩토리 메서드 정적 팩토리 메서드는 클래스의 인스턴스를 반환하는 생성자와 동일한 역할을 하는 단순 static method를 제공하는 것을 말한다. public sta...
상수를 관리하는데 Enum을 사용해야 할까?
나는 그간의 미션에서 상수를 관리할 때 하나의 클래스에 public static final을 사용해 관리하고 있었다. public class GameConstants { public static final int RANDOM_NUMBER_MIN_RANGE = 0; public static final int RANDOM_NUMBER_M...
Enum 활용
Enum Enumerance type으로 열거형이라는 뜻이다. JAVA 1.5부터 생겨난 기능으로 열거체를 정의할 수 있는 클래스이다. 주로 서로 관련있는 상수들끼리 모아 상수들을 대표할 수 있는 이름으로 타입을 정의하는데 사용된다. 비교 시 실제 값 뿐만 아니라 타입도 체크할 수 있다. 상수 값이 재정의되어도 다시 컴파일할 필요가 없다....
BiPredicate, Function
Java가 제공하는 함수형 인터페이스에는 java.util.function에서 제공하는 것들이 존재한다. 크게 5가지로 Consumer Supplier Function Operator Predicate 이 중 이 포스트에서는 Predicate 계열의 BiPredicate, Function계열의 Function에 대해 소개하려...
랜덤 값에 따라 다르게 동작하는 메서드를 테스트하는 방법
테스트 코드를 작성하다 보면 랜덤 값에 의해 다르게 작동하는 메서드를 테스트해야 하는 경우가 있다. 예를 들어보자. public class Game { private int position; public void move() { if (canMove()) { position++; } } private boolean canM...
AssertJ (테스트) 사용법
org.assertj.core.api.Assertions를 이용하는 테스트 코드 작성을 위해 AssertJ의 기본 작성법을 정리한다. AssertJ AssertJ는 Junit의 테스트 코드에 사용되고 테스트 코드의 가독성과 편의성을 더 높여주는 라이브러리이다. AssertJ의 테스트 코드는 assertThat() 으로 시작한다. 또한 메서드를 연...