Back-end

    [Spring] 학습 테스트, 버그 테스트

    💡 학습 테스트(learning test)란? 다른 개발팀에서 만들어서 제공한 라이브러리 등에 대해서도 테스트를 작성해야하는 것 자신이 사용할 API나 프레임워크의 기능을 테스트로 보면서 사용 방법을 익히기 위함. 테스트이지만 기능에 대한 검증이 목적이 아닌, 그 사용 방법을 바로 알고 있는지를 검증하는게 목적 ✏️ 학습 테스트의 장점 다양한 조건에 따른 기능을 손쉽게 확인해볼 수 있다. 학습 테스트 코드를 개발 중에 참고 할 수 있다. 프레임워크나 제품을 업그레이드할 때 호환성 검증을 도와준다. 테스트 작성에 대한 좋은 훈련이 된다. 새로운 기술을 공부하는 과정이 즐거워진다 💡 버그 테스트(bug test)란? 코드에 오류가 있을 때 그 오류를 가장 잘 드러내줄 수 있는 테스트 버그 테스트는 일단 실패..

    [Spring] 테스트를 위한 애플리케이션 컨텍스트 관리

    https://withseungryu.tistory.com/84?category=880574 Java Build Path -> classpath를 확인해준 후 아래와 같이 경로 수정 @ContextConfiguration(locations="classpath:test-applicationContext.xml") 🧐 @Autowired 란? 스프링의 DI에 사용되는 특별한 애노테이션 Autowired가 붙은 인스턴스 변수가 있으면, 테스트 컨텍스트 프레임워크는 변수 타입과 일치하는 빈을 찾는다. 타입이 일치하는 빈이 있으면 인스턴스 변수에 주입해준다. 이때 @Autowired는 applicationContext.xml에 붙은 것이 아닌, AppicationContext에 붙여있는데 애플리케이션 컨텍스트가 ..

    [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의 특징 중 하나는 테스트 할 데이터가 코드를 통해 제공되고, 테스트의 작업 역시 코드를 통해 자동으로 ..