본문 바로가기

스프링

[spring] junit 1

 

1.     Com.springsource.junit : junit

2.     Commons-logging : Spring-context가 사용

3.     Mysql-connector : Mysql JDBC

4.     Spring-aop : 스프링 기능 자체의 aop

5.     Spring-bean : 스프링 코어와 함께 의존성 주입 제공 (Core Container)

6.     Spring-context : 스프링 코어, BeanFactory를 확장한 어플리케이션 컨텍스트 구현, 리소스 로드 및 국제화 지원(Core Container)

7.     Spring-core : 다른 스프링 모듈이 사용하는 유틸리티(Core Container)

8.     Spring-expression : EL 확장 Bean속성(배열, 컬렉션 포함).(Core Container)

9.     Spring-jdbc : 스프링이 지원하는 jdbc.

 

 

 

 

 

17. @Test : JUnit에게 테스트용 메서드임을 알려준다.

18. public : Junit 테스트 메소드는 반드시 public

29. assertThat() : 첫번째 파라미터 값을 뒤에 나오는 매처(matcher)라고 불리는 조건으로 비교해서 일치하면 다음으로 넘어가고, 아니면 실패하도록 만들어줌.

29. is() : 매처의 일종으로 equals()로 비교해주는 기능을 가짐.

Junit(테스팅 프레임워크) 테스트로 전환(main에서 하던 테스트를)

-       Junit 프레임워크 > 제어역전(IOC), 개발자가 만든 클래스에 대한 제어권한을 넘겨 받아서 주도적으로 어플리케이션의 흐름을 제어한다.

Main 메소드를 이용한 테스트 방법은 어플리케이션 규모가 커지고 테스트 개수가 많아 지면 테스트를 수행하는 일이 점점 부담된다.

 

일부러 실패하기 위해서 42번 라인의 get 해오는 password를 틀리게 해봄

 

실패하면 OK 대신 FAILURES!!! 가 출력되고 assertThat()을 이용해 검증을 했을 때 AssertionError를 던진다.

30번 라인 패스워드값이 서로 다른 것을 확인할 수 있다.

 

메인메서드가 없더라도

 

Junit 테스트 결과를 보여준다.

단축키 Alt + Shift + X T

 

동일한 결과를 보장하는 테스트

 

 

 

지우고나서 0, 추가하고 1

* 단위테스트는 코드가 바뀌지 않는다면 매번 실행할 때마다 동일한 테스트 결과를 얻을 수 있어야한다.(기본키 중복문제로 테스트 시작 전에 deleteAll)

* 테스트를 마치는 마지막 부분에 deleteAll을 해줘도 되지만, 다른 테스트에서 USER 테이블에 데이터를 넣었다면 테스트가 실패 할 수 도 있으므로 테스트하기 전에 deleteAll 처리를 해주는 것이 낫다.

 

 

 

* 포괄적인 테스트

 

 

8. 파라미터가 있는 클래스 생성자 : 테스트시 빠르게 등록하기 위함

13. 클래스 생성자를 명시적으로 추가했을 때는 파라미터가 없는 디폴트 생성자도 함께 정의하는 것을 잊지 말자.

 

 

 

 

1.     getCount에 대한 결과를 매번 잘 증가하는지 확인하기 위함

30. count() : 테스트 메소드는 한번에 한가지 검증 목적에만 충실한 것이 좋다. 3개의 사용자를 추가하여 매번 결과가 하나식 증가하는지 확인

27. get()이 파라미터로 주어진 id에 해당하는 사용자를 가져오는 것인지에 대한 확실한 검증

 

 

Get 할때 null 등의 예외조건에 대한 테스트

 

EmpltyResultDataAccessException 사용을 위한 jar

 

 

 

Null 이면 예외처리

예외가 던져지면 테스트 성공

>  예외가 안던져지면 테스트 실패. 이런 특별한 방법을 Junit이 제공한다.

 

 

17. expected : 예외 클래스를 넣어주는데, 정상적으로 테스트가 완료되면 실패, 지정한 예외가 발생되면 테스트 성공하는 옵션

 

console에는 별다른 에러가 없지만 Junit에서는 해당 익셉션이 나오는걸 확인할 수 있다.

l  테스트할 때 참고사항

Ø  포괄적인 테스트(하나의 사용자가 아닌 여러사용자가 등록되었을 때 등)

Ø  부정적인 케이스(존재하지 않는 ID가 주어졌을 때)

Ø  테스트가 이끄는 개발(테스트의 실패(기본키중복)을 보고 테스트 추가)

Ø  어떻게 테스트할까? 가 아닌 추가하고 싶은 테스트 기능을 코드로 표현하려 해보면,   getUserFailure() 메서드가 같은 것이 만들어짐

Ø  실패한 테스트를 성공시키기 위한 목적 : 테스트주도개발(TDD TestDrivenDevelopment)

 

 

22. Before : 여태 중복되었던 dao를 가져오는 부분을 메소드 추출법으로 빼도 되지만 Junit 프레임웍에서 지원해주는 것을 사용.

18. 인스턴스변수 : Beforetest가 주고 받을 정보가 있다면

* 픽스처(fixture) : 테스트를 수행하는데 있어 필요한 정보나 오브젝트(dao, User)

24. @Test : 테스트메서드가 실행되면 하나의 인스턴스가 만들어짐

26~28. User 인스턴스 : 매번 새로운 오브젝트가 만들어지므로 바로 초기화해도됨

 

Junit 동작방식

'스프링' 카테고리의 다른 글

[spring] junit 3 학습테스트  (0) 2020.10.13
[spring] junit 2  (0) 2020.10.13
[Spring] SpringJDBC_Test  (0) 2020.10.12
[Spring] xml Spring IOC  (0) 2020.10.12
[spring] 수정자메소드(setter) DI  (0) 2020.10.12