웹 애플리케이션을 애플리케이션 서버에 배포하지 않고도 스프링 MVC 동작을 재현할 수 있는 클래스
-테스트 케이스의 메서드는 DispatcherServlet(프론트 컨트롤러였지! ) 에 요청할 데이터(요청 경로/ 요청 파라미터 )를 설정
-MockMvc 는 DispatcherSevlet 은 테스트용으로 확장된 TestDispatcherSevlet
-DispatcherServlet 은 요청을 받아 매핑정보를 보고 그에 맞는 핸들러(컨트롤러) 메소드 호출
테스트 케이스 메서드는 MockMvc 가 반환하는 실행결과 받아 실행결과가 맞는지 검증한다.
→ 스프링 mvc 의 설정을 적용한 DI컨테이너(dependency injection) 를 만들어 이 DI 컨테이너를 사용해 스프링 MVC 동작 재현 애플리케이션 서버에 배포한 것과 같은 것처럼 테스트가 가능하다.
**** WebApplicationContext → 스프링 프레임워크에서 ioc 컨테이너 생성시 자동으로 생성 가능하다. 웹어플리케이션컨텍스트
-webApplicationContext → 스프링 프레임워크에서 ioc 컨테이너 생성시 자동으로 생성한다.
-Autowired 의 기본 설정 : 타입이 해당 필드에 대입할 수 있는 경우.
test 를 만들 때 공통된 부분이 많이 생기잖아. 공통을 없애는게 객체지향적인 관점이기도 하잖아.
그래서 test code 를 만들때 부모 클래스를 만들기로 하자
-Controller ⇒ 1. WebTestConfig 클래스를 상속받은 junit 클래스 생성 (webTestConfig 부모 클래스를 만들고 공통되는 부분을 넣어두자. )
-mockMvc 객체를 이용하여 테스트 코드를 작성한다. (서버가 없어도 테스트 케이스에서 DispatcherSevlet에 요청을 보내줌 )
mockMvc 객체!!!!!!!!
-service , repository ⇒ 1. ModelTestConfig 클래스를 상속받는 junit 클래스를 생성
→>> 결국 controller 든 service 든 respository 든 부모 클래스인 webTestConfig 클래스를 → 생성해서 테스트 한다는 것.
service 와 repository 는 테스트 대상 스프링 빈을 주입받아 테스트 코드를 작성한다.
web.xml 을 잠시 보자

이 welcom-file 의 존재를 알게 됬어. 이것은 만약 요청이 매칭되는게 없다면 오는건데 index.html 없고 , index.htm 도 없는데 우리는index.jsp 가 있네. 그래서 localhost 만 입력해서 웹에서 검색하면 웰컴파일인 index.jsp 로 가게 되는거야.
테스트 코드작성할때 extends 하던 WebTestConfig() 에 대해서 알아보자.
junit 테스트 할때 . 테스트 상단에 있던
@RunWith(SpringUnit4ClassRunner.clsss) ,
@Contextconfiguration(applicationContext 경로)
@SpringApplicationConfiguration(Config 경로)
when a class is annotated with @RunWith or extends a class annotated with @Runwith , Junit will invoke the class it references to run the tests in that class instead of the runner build into JUNIT
테스트 실행 방법을 확장할 때 사용하는 어노테이션이다.
테스트가 사용할 애플리케이션 컨텍스트를 만들고 관리하는 작업을 진행해준다.
⇒ @RunWith 에 Runner 클래스를 설정하면 JUNIT 에 내장된 Runner 대신 그 클래스를 실행한다. 여기서는 스프링 테스트를 위해서 SpringJUnit4ClassRunner 라는 Runner 클래스를 설정해준 것.
한 클래스 내에 여러개의 테스트가 있더라도 applicationContext 를 초기 한번만 로딩하여 사용.
은 자동으로 만들어줄 어플리케이션 컨텍스트의 설정파일 위치를 지정
@ContextConfiguration 의 locations 속성에는 xml 형태의 애플리케이션 컨텍스트만 로딩이 가능(class 파일을 지정하면 오류 발생 )
@SpringApplicationConfiguration 은 Spring boot 에서 class 형태의 애플리케이션 컨텍스트를 로딩할 수 있는것 . ex)@클래스를 지정할 수 있는 것으로 보인다.
@WebAppConfiguration : 스프링 환경을 WEB 기반의 application Context 로 생성.
login 기능 마이그레이션(jsp/servlet ⇒ spring)
.jsp 의 위치
(webapp/..)우리 jsp 는 webapp 에 넣어 놨었잖아. 그런데 쉽게 url 로 접근할 수 없는 WEB-INF 에 넣어놓고, URL 로 평소에 접근하는 방식대로가 아니라, MAPPING 으로 (return 값으로) 접근을 해보자.
webapp/WEB-INF/views (보안 : url 로 접근이 안되는 곳에 넣어 두기 )
(header.jsp , left.jsp , common_lib.jsp)
기존 : 요청을 위임
req.getRequestDispatcher("/login.jsp").forward(req,resp);
변경
Spring 으로 요청위임을 한다. (목적)
메소드를 requestMapping() 이름들로 method 에 접근하고, 그 method 가 return 하는 값을 받아온다. (그것이 예전 그림에서 말한 view name 이야, ) 5번 vire name 보이지, 저걸로 Handler Adapter 로 가서 어떤 것으로 연결해줄지, 알 수 있겠지.
