2016-12-14 5 views
0

를 사용하여 ServletActionContext.getRequest()을 조롱하는 방법 :내가 클래스 <code>queryAction</code>의 기능 <code>queryInfo</code>에 단위 테스트를 만들기 위해 노력 JMockit

:

단위 테스트를 실행하는
public class queryAction{ 
    public String queryInfo(){ 
    // do something... 
    // this line throw Exception 
    HttpServletRequest request = ServletActionContext.getRequest(); 
    String areaInfo = request.getParameter("paramJson"); 
    // do something... 
    } 
} 

다음과 같은 오류를보고

queryAction (com.huawei.provision.queryActionTest) 경과 시간 : 0.047 초 < < < 오류! java.lang.NullPointerException이 : org.apache.struts2.ServletActionContext.getRequest에서 널 (null) (ServletActionContext.java:112)

그리고는 여전히 one way using Mockitoanother way using easymock하지만 돈과 같은 몇 가지 질문과 답변을 보았다 JMockit으로이 문제를 해결하는 방법을 알지 못합니다.

+0

시도한 것을 보여주는 것이 도움이됩니다. 단위 테스트를 시도한 곳은 어디입니까? – dcsohl

답변

0

이 시험에서는 areaInfoqueryInfo()으로 돌려 보내고 있습니다.

두 경우 모두 @Mocked을 사용하고 모의를 호출해야합니다 (ServletActionContext.getRequest()).

package com.platypus; 

import static org.junit.Assert.assertEquals; 

import javax.servlet.http.HttpServletRequest; 

import org.junit.Test; 
import org.junit.runner.RunWith; 

import mockit.Expectations; 
import mockit.Mocked; 
import mockit.Tested; 
import mockit.integration.junit4.JMockit; 


@RunWith(JMockit.class) 
public class ServletActionContextTest 
{ 

    @Tested 
    private QueryAction queryAction; 

    @Mocked 
    private HttpServletRequest httpServletRequest; 
    @Mocked 
    private ServletActionContext servletActionContext; 

    @Test 
    public void test() 
      throws Exception 
    { 
     new Expectations(){{ 
      ServletActionContext.getRequest(); result = httpServletRequest; 
      httpServletRequest.getParameter("paramJson"); result = "foo"; 
     }}; 

     String queryInfo = queryAction.queryInfo(); 

     assertEquals("foo", queryInfo); 
    } 
} 
+0

정적 방법에 "가짜를 사용해야"하는 이유는 무엇입니까? 이 경우에는'@ Mocked'를 절대 사용할 수 있습니다. – dcsohl

+0

나를 위해 엄지 손가락의 일종, 어쩌면 내가 그것을 재고해야합니다. – Alfergon

+0

좋은 전화 @dcsohl 가짜에 대한 필요가 없습니다;) – Alfergon