이클립스던 intellij던 Spring을 만들었을 때
디렉토리에 test라는 폴더가 보였을 것이다
이 테스트 폴더에 우리가 클래스를 생성하여
테스트 서버를 설정하여 자료의 입력이 정상적으로 구동되는지 확인할 수 있다.
만약 실무에서
UI 담당자가 일처리를 늦게해 UI를 이용할 수 없다면
자바 개발자가 기껏 코드를 만들어도 테스트 할 수 없는 경우가 생길 것이다.
이러한 상황에 대처하기 위해 Test클래스를 이용하는 것이다.
먼저 Test클래스를 위한 junit 라이브러리를 다운받도록 하자
junit은 이전에 포스팅 했던 MVNrepository에서 다운이 가능하다
https://mvnrepository.com/search?q=junit
여기서 다운을 할 수 있다
클릭해서 들어가서 추가하도록 하자
메이븐 코드를 직접 추가하던
jar파일을 받아 추가하던 편한 방법으로 라이브러리를 추가해준다.
난 아래와 같이 pom.xml에 추가하는 방법을 이용했다.
<!-- Test -->
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.12</version>
<scope>test</scope>
</dependency>
이 이후 라이브러리 설정은 매번 했기에 생략한다.
이렇게 되면 이제부터 junit 메소드와 어노테이션 등을 활용 가능하다.
test 디렉터리 밑에 패키지 - 클래스를 생성한다.
intellij의 경우
(일반클래스 생성하면된다, 모양이 살짝 다른건 나중에 코드 수정하면
자동으로 바뀐다)
난 자바에서 직접 생성해줬지만
패키지를 생성해서 하는 편이 더 깔끔하지 않을까 싶다.
또 eclipse의 경우에는 다 지원해줘서 아래와 같이 생성될 것이다.
일단 TestHomeController1은 이런 식으로 코딩해봤다.
@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(
locations = {"file:web/WEB-INF/applicationContext.xml",
"file:web/WEB-INF/dispatcher-servlet.xml"}
)
public class TestHomeController1 {
private static final Logger logger = LoggerFactory.getLogger(TestHomeController1.class);
@Autowired // Dependency Injection(의존성 주입)
private WebApplicationContext wac;
private MockMvc mock;
@Before
public void beforeTest(){
logger.info("===== beforeTest() =====");
mock = MockMvcBuilders.webAppContextSetup(wac).build();
logger.info("wac: " + wac);
logger.info("mock: " + mock);
}
@Test
public void doTest(){
logger.info("===== doTest() =====");
RequestBuilder req = MockMvcRequestBuilders.post("/login").
param("userid","admin").
param("pwd","!@#$");
try {
mock.perform(req);
logger.info("수행 성공");
} catch (Exception e) {
logger.error("수행 실패: " + e.getMessage());
}
}
@After
public void afterTest(){
logger.info("===== afterTest() =====");
}
}
위에서부터 차근차근 설명하자면
Runwith 어노테이션은 이 클래스를 테스트 클래스로 사용하겠다는 설정
WebAppconfiguration은 프로젝트의 web.xml이 아닌 가상의 web.xml을 사용하겠다는 의미이다.
contextConfiguration은 어플리케이션 설정과, 디스패처 서블릿의 xml설정을 디렉토리에서 가져오겠다는 어노테이션이다.
클래스 안쪽에서는 먼저 로거가 설정되어있따.
다음은 @Autowired로 스프링에게 wac의 내용값을 맡긴다.
스프링이 알아서 webappconfiguration 내용값을 채워 줄 것이다.
어노테이션은 바로 밑줄까지만 영향력을 발휘하기에
그 다음줄에 있는 mock은 null값으로 설정되게 된다.
MockMvcf란 ajax나 client(browser)에서 요청 내용을 controller에서 받아 처리하는것과 같은 테스트 진행을 가능하게 한다.
즉 mock값을 이용해 post나 get 요청을 가상으로 보낼 수 있게된다.
다음으로 테스트 클래스는 어노테이션을 어떻게 붙이냐에 따라서
호출되는 메소드가 나뉜다
beforeTest doTest afterTest 어노테이션에 따라 차례대로 가동되게 된다.
beforeTest에서 먼저 요청을 보낼 mock이 참조할 웹어플리케이션설정을 부여하고
doTest에서 가상은 post요청을 로그인 서블릿에 파라미터를 포함한다.
그후 perform 메소드를 이용해 보내는 방식이다.
이런식으로 설정하게 되면
UI 담당자가 UI 제작이 느려 테스트를 해볼 수 없더라도
독자적으로 테스트가 가능하여 백엔드 개발자의 일의 능률을 높일 수 있다.
'프로그래밍 > Web-Spring' 카테고리의 다른 글
Spring 프레임워크에서 Oracle을 사용하기 (1) | 2017.11.15 |
---|---|
@ResponseBody, jackson-databind 라이브러리 활용 (0) | 2017.11.15 |
MVC Patterns 기본적 컨트롤러 생성 / redirect 활용 (0) | 2017.11.15 |