2012-09-20 3 views
1

를 사용하지만 여전히 우리는 나는 이런 식으로 뭔가를 시도 Struts2

@RunWith(MockitoJUnitRunner.class) 
public class MyActionTest extends BaseActionTestCase { 
     @Mock private ServletActionContext context; 

@Mock 
private serviceclass serviceMock; 
@InjectMocks 
private MyAction action; 

@Test 
public void testSave() throws Exception { 
     when(serviceMock.getTaskCode()).thenReturn("tc"); 
    action.save(); 
    verify(serviceMock).saveObject(any(Task.class)); 
} 

가 게시 스택 트레이스 NullPointerException이

을 던지고있다 Mockito를 사용하여 ServletActionContext.getRequest()을 조롱하는 방법 :

java.lang.NullPointerException 
    at org.apache.struts2.ServletActionContext.getRequest(ServletActionContext.java:112) 
    at com.princess.ilo.webapp.action.BaseAction.getRequest(BaseAction.java:176) 
    at com.princess.ilo.webapp.action.BaseAction.getSession(BaseAction.java:198) 
    at com.princess.ilo.webapp.action.BaseAction.getUser(BaseAction.java:206) 
    at com.princess.ilo.webapp.action.TaskAction.save(TaskAction.java:116) 
    at com.princess.ilo.webapp.action.TaskActionTest.testSave(TaskActionTest.java:97) 
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 
    at java.lang.reflect.Method.invoke(Method.java:597) 
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44) 
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15) 
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41) 
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20) 
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:28) 
    at org.junit.runners.BlockJUnit4ClassRunner.runNotIgnored(BlockJUnit4ClassRunner.java:79) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:71) 
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:49) 
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) 
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) 
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) 
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) 
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) 
    at org.junit.runners.ParentRunner.run(ParentRunner.java:236) 
    at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37) 
    at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62) 
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:50) 
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) 
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests 
+0

좀 더 코드를 올리시겠습니까? –

+0

동작 개체 (SUT)는 어떻게 만듭니 까? –

+0

여기 @injectMocks private MyAction 액션 자체가 다음과 같이 실제 메소드를 호출하는 me.so 객체를 만듭니다. action.mysaveMethod(); –

답변

0

흠, 난 여전히 당신을 말할 것입니다

@InjectMocks private MyAction action = new MyAction(); 

http://docs.mockito.googlecode.com/hg/org/mockito/InjectMocks.html 일부 전자를 보려면 액션 객체를 만들어야합니다. x 샘플

+0

그 도움이 ... –

+0

NPE의 원인을 디버그하십시오. –

+0

http://stackoverflow.com/questions/10756591/strut-2- 3-1-2- 유닛 테스트 - 제거 - 스프링 - 코드 종속성 - 대 - npe-with-getcontex –

관련 문제