자바
[Spring] JUnit - @Before, @After
💡 @Before, @After 란? Test 코드에서 아래 코드가 계속 중복되는 것을 볼 수 있다. ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml"); User dao = context.getBean("userDao", UserDao.class); 이렇게 중복된 코드는 별도의 메소드로 뽑아내는 것이 가장 손쉬운 방법인데, 메소드 추출 리팩토링 방법이 아닌 JUnit이 제공하는 기능인 @Before, @After가 존재한다. ✏️ @Before는 반복되는 준비 작업을 별도의 메소드에 넣게 해 주고, 이를 매번 테스트 메소드를 실행하기 전에 먼저 자동으로 실행시켜주는 기능이다. ✏️ @After는 @..
[Spring] 테스트 주도 개발 (TDD)
💡 테스트 주도 개발이란? 이전 글에서 get() 메소드의 예외 테스트를 만드는 순서를 보면, 새로운 기능을 넣기 위해 UserDao를 수정한 후 수정한 코드를 검증하기 위한 테스트 구현 순서가 아닌, 테스트를 먼저 만들어 테스트가 실패하는 것을 본 후 UserDao의 코드를 수정하는 순서이다. 이러한 순서는 좀 이상하다고 생각할지 모르지만, 이런 순서로 진행하는 테스트가 이끄는 개발을 극대화한 방법을 테스트 주도 개발(TDD)이라 한다. TDD의 기본 원칙 "실패한 테스트를 성공시키기 위한 목적이 아닌 코드는 만들지 않는다." ✏️ 장점 테스트를 먼저 만들기 때문에 테스트를 빼먹지 않고 꼼꼼하게 만들 수 있다. 테스트를 작성하는 시간과 애플리케이션 코드를 작성하는 시간의 간격이 짧다. 코드를 작성하면 ..
[Spring] JUnit - 예외조건에 대한 테스트
💡 만약 메소드에 전달된 파리미터 값이 없을 때 어떻게 해결해야 할까? 해결 방법 : null과 같은 특별한 값을 리턴 값에 해당하는 정보를 찾을 수 없다고 예외를 던진다. 1번은 구현하기 간단하니 2번을 천천히 구현해보자. 두번째 방법을 위해 해당하는 정보가 없다는 의미를 가진 예외 클래스가 하나 필요한데 스프링이 미리 정의해 놓은 예외가 존재하며 가져다 써도 된다. 지금부터 UserDao의 get() 메소드에 전달된 id값에 해당하는 사용자 정보가 없을 때 예외를 던져 테스트 해보자. 예외 클래스로는 EmptyResultDataAccessException을 사용할건데, 먼저 java.org.springframework.dao 라이브러리가 있는지 확인을 해줘야한다. 일반적인 테스트는 다 원활이 수행되면..
[Spring] 테스트 자동화 - JUnit 도구 활용
💡 테스트를 해야하는 이유? 테스트란 의도했던 대로 코드가 정확히 동작하는지를 확인해서 만든 코드를 확신할 수 있게 해주는 작업 테스트의 결과 원하는 대로 나오지 않는 경우 코드나 설계에 결함이 있음을 알 수 있음 최종적으로 테스트가 성공하면 모든 결함이 제거됐다는 확신을 얻을 수 있음 💡 작은 단위에 테스트 테스트하고자 하는 대상이 명확하면 그 대상에만 집중해서 테스트하는 것이 바람직하다. 따라서 분리하고 집중해서 접근하자 이것을 단위 테스트라고 한다. 지금까지 만들어 온 UserDaoTest도 DB의 상태를 테스트하고 있어 단위 테스트라고 해도 된다. 💡 자동 수행 테스트 코드 UserDaoTest의 특징 중 하나는 테스트 할 데이터가 코드를 통해 제공되고, 테스트의 작업 역시 코드를 통해 자동으로 ..
[Spring] XML을 이용한 DI 의존관계 설정정보
지금까지 DI 의존관계 설정정보를 자바 코드를 이용해 만들어왔다. 스프링에서는 다양한 방법을 통해 DI 의존관계 설정정보를 만들 수 있는데, 대표적으로 XML이 있다. ✏️XML의 장점 단순한 텍스트 파일이기 때문에 다루기 쉽다. 쉽게 이해할 수 있으며 컴파일과 같은 별도의 빌드 작업이 없다 환경이 달라져서 오브젝트 관계가 바뀌는 경우에도 빠르게 변경사항을 반영 할 수 있다. 스키마나 DTD를 이용해서 정해진 포맷을 따라 작성됐는지 손쉽게 확인할 수 있다. ✏️ XML을 이용한 설정 애플리케이션 컨텍스트는 XML에 담긴 DI 정보를 활용 할 수 있다. XML 설정은 @Configuration과 @Bean이 붙은 자바 클래스로 만든 설정과 내용이 동일한데 아래와 같이 만들 수 있다. 자바 코드 설정정보 X..
[Spring] 의존성 주입 - DI
💡 의존성 주입이란? IoC라는 용어는 매우 느슨하게 정의돼서 폭 넓게 사용되는 용어입니다. 그렇기 때문에 몇몇 사람의 제안으로 스프링이 제공하는 IoC방식의 핵심을 짚어주는 명확히 드러나는 이름을 만드는데, 이를 의존관계 주입(Dependency Injection)이라고 합니다. 스프링 IoC 기능의 대표적인 동작원리는 주로 의존관계 주입이라고 불립니다. 따라서 IoC컨테이너를 지금은 의존관계 주입 컨테이너, DI 컨테이너라 더 많이 불리고 있습니다. ✏️ 의존관계란? 누가 누구에게 의존하는 관계에 있다. UML모델에서는 두 클래스의 의존관계를 아래와 같이 표현한다. 의존한다는 건 의존대상, B가 A에 영향을 미친다는 뜻인데, B의 기능이 추가되거나 변경되면 그 영향이 A로 전달된다는 것이다. 다시 말..