잘못된 내용이나 더 나은 방식 등에 대한 의견은 댓글로 피드백 부탁드리겠습니다. :)
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.web.context.WebApplicationContext;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath*:framework/spring/context-*.xml",
"file:src/main/webapp/WEB-INF/config/framework/springmvc/dispatcher-servlet.xml"})
@WebAppConfiguration("file:src/main/webapp")
public class MainTest {
@Autowired
public WebApplicationContext wac;
}
file:src/main/webapp
이라고 합니다.file:xx
구문을 사용합니다.@WebAppConfiguration("file:src/webapp")
import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mock.web.MockHttpSession;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.web.WebAppConfiguration;
import org.springframework.web.context.WebApplicationContext;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:framework/spring-test/context-*.xml",
"file:src/main/webapp/WEB-INF/config/framework/springmvc/dispatcher-servlet.xml"})
@WebAppConfiguration
public class MainTest {
@Autowired
public WebApplicationContext wac;
public MockHttpSession mockSession;
public MainTest() {
/* testSession :
id = user304 login 후 생성되는 session */
SessionVO session = new SessionVO();
session.setUser_id("user304");
session.setCompany_id("testId");
session.setNm_company("(테스트회사");
session.setNm_user("테스터1");
...
mockSession = new MockHttpSession();
mockSession.setAttribute("sessionVO", session);
}
}
SessionVO
: session 정보를 담기 위한 vo 입니다.mockSession.getAttribute("sessionVO");
로 꺼내쓰고@Ignore("테스트 설정 클래스")
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"classpath:framework/spring-test/context-*.xml",
"file:src/main/webapp/WEB-INF/config/framework/springmvc/dispatcher-servlet.xml"})
@WebAppConfiguration
public class MainTest {
public static final Logger LOGGER = LoggerFactory.getLogger(MainTest.class);
public MockHttpSession mockSession;
private TestSessions testSessions = new TestSessions();
public MainTest() {
/* testSession :
id = user304 login 후 생성되는 session */
SessionVO session = testSessions.setTestSessionUser304();
mockSession = new MockHttpSession();
mockSession.setAttribute("sessionVO", session);
}
public MainTest(String userId) {
/* testSession :
login 되는 user_id에 따라 생성되는 session이 다름 */
SessionVO session = testSessions.setTestSessionUser304();
if ("testUser1".equals(userId)) {
session = testSessions.setTestSessionTestUser1();
} else if ("testUser2".equals(userId)) {
session = testSessions.setTestSessionTestUser2();
}
mockSession = new MockHttpSession();
mockSession.setAttribute("sessionVO", session);
}
@After
public void clearSession() {
mockSession.clearAttributes();
mockSession = null;
}
}
TestSessions
클래스를 생성하여 세션 생성 기능을 관리setTestSession()
method를 정비해야 할 것으로 생각됩니다./*
* 테스트를 위한 세션 설정을 위한 클래스
* */
public class TestSessions {
public TestSessions() {
}
/* user304 로그인 시 생성되는 세션 */
public SessionVO setTestSessionUser304() {
SessionVO session = new SessionVO();
...
session.setNm_company(테스터304");
session.setActno("123-45-67890");
...
return session;
}
/* testUser1 로그인 시 생성되는 세션 (영리 회계 확인 등) */
public SessionVO setTestSessionTestUser1() {
SessionVO session = new SessionVO();
...
session.setNm_company("테스트님1");
session.setActno("123-45-67890");
...
return session;
}
/* testUser2 로그인 시 생성되는 세션 (비영리 회계 확인, 기능 점검 등) */
public SessionVO setTestSessionTestUser2() {
SessionVO session = new SessionVO();
...
session.setNm_company("테스트님2");
session.setActno("999-99-99999");
...
return session;
}
}
package kr.co.ehm.init;
import org.junit.Before;
import org.junit.Ignore;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;
import org.springframework.web.context.WebApplicationContext;
@Ignore("테스트 설정 클래스")
public class MainMvcTest extends MainTest {
@Autowired
public WebApplicationContext wac;
public MockMvc mockMvc;
public MainMvcTest() {
}
public MainMvcTest(String userId) {
super(userId);
}
@Before
public void setUp() {
mockMvc = MockMvcBuilders.webAppContextSetup(wac).build();
}
}
MainMvcTest
를 상속하여 설정하고 로직 확인을 위한 단위테스트는 MainTest
를 상속하여 설정하는 방식으로 구현하였습니다. @DisplayName("A special test case")
와 같은 방식을 참조항려 @value에 String을 입력할 수 있는 annotation을 생성하여 테스트에 대한 구분이 용이하도록 설명을 달아보고자 하였습니다.import org.junit.Ignore;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Ignore
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.SOURCE)
public @interface TestDesc {
String value();
}
@Test
@TestDesc("전표 저장 테스트 (일반대체전표, 구분 : 출금)")
@Transactional
public void saveAccountingBookWithWithdrawalGeneralSlip() throws Exception {
...
}