Struts2 + Spring + iBatis 환경에서 MVC 테스트 방법을 찾아봤다.

POJO(s/getter) 방식과 Request s/getAttribute 방식 두가지로 결과값을 받아 데이터를 검증해보자.


[GoodsActionCase.java]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.is;
import static org.hamcrest.Matchers.notNullValue;
import static org.junit.Assert.assertThat;
 
import java.util.HashMap;
import java.util.Map;
 
import org.apache.struts2.ServletActionContext;
import org.junit.Test;
import org.springframework.mock.web.MockHttpServletRequest;
 
import com.opensymphony.xwork2.ActionProxy;;
 
public class GoodsActionCase extends StrutsTestCaseSupport {
 
    @Test
    public void 상품상세() throws Exception {
        Map sessionMap = new HashMap();
 
        // /view/goodsDetail.action
        ActionProxy proxy = StrutsTestCaseSupport.getInstance().createActionProxy ("detail", "/goods", sessionMap);
        MockHttpServletRequest request = new MockHttpServletRequest();
        request.setParameter("코드", "123456");
        ServletActionContext.setRequest(request);
 
 
        GoodsAction goodsAction = (GoodsAction) proxy.getAction();
        goodsAction.detail();
 
        GoodsInfoBean memberFieldData   = goodsAction.getDataBean();
        GoodsInfoBean setAttributeData  = (GoodsInfoBean) ServletActionContext.getRequest().getAttribute("goodsInfo");
 
        assertThat("널이 아니겠지?", memberFieldData, is(notNullValue()));
        assertThat("널이 아니겠지?", setAttributeData, is(notNullValue()));
        assertThat("앞뒤가 같겠지?", memberFieldData.getGoodsNm(), equalTo(setAttributeData.getGoodsNm()));
    }
}

[환경]

Struts2 2.0.x

Spring 2.5.x

StrutsTestCaseSupport.java - http://fassisrosa.blogspot.kr/2007/09/unit-testing-struts-20-part-3.html


DTD 부분 오타 있으면 발생하는군요....


<?xml version="1.0" encoding="euc-kr" ?>

<!DOCTYPE struts PUBLIC

    "-//Apahce Software Foundation//DTD Struts Configuration 2.0//EN"

    "http://struts.apache.org/dtds/struts-2.0.dtd">



Apahce  ;;; --> Apache 흠.. 이 전에는 왜 잘 됐었지 ;; 어이 없네..(리얼도 잘 된다.. 왜 이려..)


Struts 이용 중 Redirect 시 parameter 을 넘겨야 할 필요성이 있다.

struts 1.2 버전 밑에서는 아래와 같이 한다.

return new ActionForward("/index.do?param=value", true);

하지만 이 방법은 이동 URL을 JAVA 파일에 정의하게되어  struts의 struts-config.xml 설정파일과 별도로 관리해야 하는 단점이 있다.


그래서 struts 1.2 이상에서부터는 아래와 같은 방법을 제공한다.

ActionRedirect redirect = new ActionRedirect( mapping.findForward("success") );
redirect.addParameter("param", "123");
return redirect;

"success" 이름으로 struts-config.xml 에 정의된 URL에 param 이라는 parameter 정보를 붙여준다.

또한 1.2 이후 부터는 단순 jsp 이동 시 아래 방법은 이용 못하고, 
<action path="/index2" type="org.apache.struts.actions.ForwardAction" forward="/index.jsp" />

이 방법을 사용해야 된다.
<action path="/index" forward="/index.jsp" />

+ Recent posts