# 토비의 스프링 [2장 - 2장 마무리] 스터디

11094 단어 toby-springtoby-spring

주요 포커스

스프링이 제공하는 가장 중요한 가치 -> 객체지향, 테스트
스프링 핵심 -> IoC와 DI는 오브젝트의 설계와 생성, 관계, 사용에 관한 기술

테스트의 가치와 장점, 활용 전략, 스프링과의 관계

테스트란,

- 내가 예상하고 의도했던 대로 코드가 정확히 동작하는지 확인
- 결함이 나올 경우 디버깅 작업 수행
- 최종 테스트가 성공하면 모든 결함이 제거됐다는 확신을 얻을 수 있다.

기본적인 테스트 코드

public class UserDaoTest {
	public static void main(String[] args) throws SQLException {
		ApplicationContext context = new GenericXmlApplicationContext("applicationContext.xml");
		UserDao dao = context.getBean("userDao", UserDao.class);

		User user = new User();
		user.setId("user");
		user.setName("강원준");
		user.setPassword("test");

		dao.add(user);

		System.out.println(user.getId() + " 등록 성공");

		User user2 = dao.get(user.getId());
		System.out.println(user2.getName());
		System.out.println(user2.getPassword());
		
		System.out.println(user2.getId() + " 조회 성공");
	}
}

특징

- 자바에서 손쉽게 실행 가능한 main() 메소드 활용
- 테스트 대상인 UserDao의 오브젝트를 가져와 메소드를 호출한다.
- 테스트에 사용할 입력 값(User)을 직접 코드에서 만들어 넣어준다.
- 테스트의 결과를 콘솔에 출력해준다.
- 각 단계의 작업이 에러 없이 끝나면 콘솔에 성공 메시지로 출력해준다.

Junit을 활용한 테스트로 테스트 Refactoring!!

- Test 클래스에서 메소드 단위로  단위 테스트할 수 있도록 @Test 어노테이션을 활용한다.
- UserDao와 같은 구성으로 UserDaoTest 클래스를 만들어 멤버 변수 및 메소드를 구현하여 테스트한다.
- Junit assert 메소드로 테스트케이스를 수행한다.
import static org.hamcrest.CoreMatchers.*;
import static org.hamcrest.MatcherAssert.assertThat;

@SpringBootTest
public class UserDaoTest {
    @Autowired
    UserDao dao;
    @Test
    public void addAndGet() throws SQLException, ClassNotFoundException {
        User user = new User("aa", "wonjune", "1234");
        dao.add(user);
        User user2 = dao.get(user.getId());

        assertThat(user2.getName(), is(user.getName()));
        assertThat(user2.getPassword(), is(user.getPassword()));
    }
}

Junit 테스트 수행 순서

1. 테스트 클래스에서 @Test가 붙은 public이고 void형이며 파라미터가 없는 테스트 메소드를 모두 찾는다.
2. 테스트 클래스의 오브젝트를 하나 만든다.
3. @Before가 붙은 메소드가 있으면 실행한다.
4. @Test가 붙은 메소드를 하나 호출하고 테스트 결과를 저장한다.
5. @After가 붙은 메소드가 있으면 실행한다.
6. 나머지 테스트 메소드에 대해 2번-5번을 반복한다.
7. 모든 테스트의 결과를 종합해서 돌려준다.

Junit 테스트 수행시 주의점
각 테스트 메소드를 실행할 때마다 테스트 클래스의 오브젝트를 새로 만든다.
한번 만들어진 테스트 클래스의 오브젝트는 하나의 테스트 메소드를 사용하고 나면 버려진다.

픽스처
테스트를 수행하는 데 필요한 정보나 오브젝트
픽스처는 여러 테스트에 반복적으로 사용
@Before 메소드를 이용해 생성한다.

좋은 웹페이지 즐겨찾기