본문 바로가기
개발

JNDI 설정 단위 테스트: Spring Framework에서의 효과적인 접근 방법

by 닉네임 입니다 2024. 11. 13.
728x90

JNDI 설정 시 단위 테스트하기: Spring Framework에서의 접근

안녕하세요, 프로그래밍을 사랑하는 여러분! 오늘은 Spring Framework를 활용하여 JNDI 설정 시 단위 테스트하는 방법에 대해 이야기해보겠습니다. 이 포스트에서는 효과적으로 테스트할 수 있는 방법과 관련된 코드 예제를 살펴보겠습니다. JNDI는 Java Naming and Directory Interface의 약자로, 애플리케이션에서 리소스(예: 데이터베이스 연결)를 찾기 위해 사용됩니다.

JNDI 단위 테스트의 필요성

JNDI는 서버 실행 시 설정된 DB Connection 객체에 접근하기 위해 사용하는 기술입니다. 하지만 단위 테스트를 진행할 때는 서버를 구동시키지 않기 때문에 context 설정 파일을 읽지 못해 발생하는 문제점이 있습니다. 따라서, 별도의 설정을 통해 이를 해결해야 합니다.

테스트할 프로젝트

이번 테스트의 주요 대상은 CafeController 클래스의 getMenu() 메소드입니다. 이 메소드는 POST 방식으로 호출되며, JSON 문자열을 받아서 결과를 Map으로 리턴합니다.

Controller: CafeController.java

@RequestMapping(value = "/cmp/getMenu.ajax", method = { RequestMethod.POST })
public @ResponseBody Map<String, Object> getMenu(HttpSession session, @RequestBody String jsonString) throws Exception {
    Map<String, Object> resultMap = new HashMap<String, Object>();
    
    try {
        ObjectMapper mapper = new ObjectMapper();
        Map<String, Object> map = mapper.readValue(jsonString, new TypeReference<Map<String, String>>(){});
        
        List<Object> resultList = cmpService.getMenu(map);
        resultMap.put("resultList", resultList);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return resultMap;
}

위의 코드는 JSON 문자열을 Map 형태로 변환한 후, 서비스 계층에서 제공하는 getMenu 메소드를 호출하여 결과를 반환합니다.

테스트 코드 작성하기

이제 CafeController에 대한 단위 테스트를 작성해 보겠습니다.

테스트 코드: CafeControllerTest.java

@RunWith(SpringJUnit4ClassRunner.class)
@WebAppConfiguration
@ContextConfiguration(locations={
        "file:src/main/webapp/WEB-INF/spring/appServlet/servlet-context.xml",
        "file:src/test/resources/spring/context-*.xml",
        "file:src/test/resources/mybatis-config.xml"
})
public class CafeControllerTest {
    protected static final Logger logger = LoggerFactory.getLogger(CafeControllerTest.class);

    @Autowired
    private CafeController cafeController;

    private MockMvc mockMvc;
    private MediaType contentType = new MediaType(MediaType.APPLICATION_JSON.getType(),
            MediaType.APPLICATION_JSON.getSubtype(), Charset.forName("utf8"));

    @Before
    public void setUp() throws Exception {
        this.mockMvc = MockMvcBuilders.standaloneSetup(cafeController).build();
    }

    @Test
    public void getMenuTest() throws Exception {
        MockHttpServletRequestBuilder r = MockMvcRequestBuilders.post("/cmp/getMenu.ajax");
        r.contentType(contentType);
        r.content("{"menu":"아메리카노"}");

        MvcResult rs = mockMvc.perform(r)
            .andDo(print())
            .andExpect(MockMvcResultMatchers.status().isOk())
            .andReturn();
    }
}

위 코드에서는 Spring의 MockMvc를 활용하여 getMenu 메소드에 대한 POST 요청을 시뮬레이션합니다. 이로써 실제 WAS를 구동하지 않고도 요청과 응답을 테스트할 수 있습니다.

결론

오늘은 Spring Framework에서 JNDI 설정 시 단위 테스트를 진행하는 방법을 알아보았습니다. JNDI를 사용하여 데이터베이스와 연결할 때 발생할 수 있는 어려움은 이러한 단위 테스트로 해결 가능합니다. 실제 프로젝트에서 서버를 반복적으로 구동하지 않고도 테스트를 진행할 수 있어 매우 유용합니다.

여러분도 이 접근 방식을 활용해보세요. 더 궁금한 점이 있거나 의견이 있으시면 댓글로 남겨주시면 좋겠습니다. 다음 포스트에서 또 만나요!

728x90