2014-09-18 1 views
1

나는 JUnit 테스트를 실행 중이다.Struts2 TDD - 테스트 체인 - 운영자가 체인을 수행하는 것을 방지하는 방법?

우리는 테스트 중에 작업이 작동하도록하지만 새로운 작업으로 연결될 때 - 새로운 (연쇄 된) 작업이 올바르게 설정되지 않았고 내부 코드가 설정되지 않는 모든 내부 테스트 프레임 워크 (StrutsTestCase에서 상속)를 보유합니다. NULL로 실행됩니다.

테스트는 동작 호출의 올바른 결과 만 테스트해야하며 이 아니고은 연결 작업을 테스트해야한다고 생각합니다.

내 질문 : 테스트하는 동안 연결을 해제하는 방법을 찾고 있습니다. StrutsTestCase.setUp()에서 생성 된 Dispatcher를 체인 다르게 처리하도록 구성 할 수 있습니까 (예 : 아무 작업도 수행하지 않음)?

위시 나는 연쇄를 피할 수는 있지만 그것이 여기에서 완료되는 방식입니다. 작업 : -

편집이 여기에 코드입니다

@Action(value = SUBMIT, results = { 
     @Result(name = SUCCESS, type = "chain", params = { "actionName", "myActionName", "namespace", "/myNameSpace" }) }) 
public String submitForm() throws IllegalAccessException, InvocationTargetException, IOException  { 

    return SUCCESS; 
} 

테스트 :

@Test 
public void testStuff() throws Exception { 
    setupAction(); 
    prepareForValidUser(); 
    this.actionUnderTest.getModel().setUpSomeStuff(someSetupValue); 
    final String result = this.proxy.execute(); 
    assertEquals("Result not the expected result", SUCCESS, result); 
} 

테스트는 좋은 테스트 프레임 워크에 크게 의존; proxy.execute()는 액션 (com.opensymphony.xwork2.ActionProxy.class)을 실행합니다.

+1

액션 호출의 결과 만 테스트하려면 체인뿐만 아니라 어떤 결과도 실행하지 않도록 테스트를 설정해야합니다. 그리고 네, 당신이하고있는 일과 당신이 무엇을하고 있는지를 아는 경우에만 사슬을 사용하십시오. –

+0

어떤 종류의 사용 사례를 코딩하는지 알려주지 않습니다. 문제와 관련된 코드를 게시하십시오. –

+0

@AleksandrM 예 동의합니다. 그러나 설정하는 방법을 모르기 때문에 어떤 결과도 실행되지 않습니다. – Skychan

답변

0

해결 방법은 struts 프레임 워크를 사용하여 액션을 실행하는 대신 직접 액션 메서드를 호출하는 것입니다.

이 :

final String result = this.proxy.execute(); 

final String result = this.actionUnderTest.myActionMethod(); 

이 나를 위해 잘 작동된다! 이렇게하는 것은 아무 것도 액션 메소드의 결과에서 처리/실행되지 않는다는 것을 의미합니다 (예 : 연쇄가 발생하지 않음).

+0

이것은 효과가 있습니다. 기억해야 할 점은 prepare()가 호출되지 않는다는 것입니다. myActionMethod()를 호출하기 전에 테스트에서 actionUnderTest.prepare()를 호출 할 수 있고해야합니다. – Skychan

관련 문제