2016-08-24 4 views
0

AWS SWF 워크 플로우에 대한 단위 테스트를 작성하려고합니다. 아래는 내가SWF 워크 플로우 클라이언트에서 다른 메소드 모의

@Override 
public void execute(String abc) { 
    new TryCatch() { 

     @Override 
     protected void doTry() throws Throwable { 
      Promise<SomeObject> temp = activityClient.action(abc); 
      again(temp, abc); 
     } 

     @Override 
     protected void doCatch(Throwable e) throws Throwable { 
      throw new RuntimeException(e); 
     } 
    }; 
} 


@Asynchronous 
public void again(Promise<SomeObject> someObject, String abc) { 
    // Do Something 
} 

내 테스트 클래스를 테스트하고자하는 코드는 다음과 같이이다 : 나는 테스트 클래스 이상 작성하는 SWF Testing Docs을 사용했다

public class SomeWorkflowTest extends AbstractTestCase { 

    @Rule 
    public WorkflowTest workflowTest = new WorkflowTest(); 

    List<String> trace; 
    private SomeWorkflowClientFactory workflowFactory = new SomeWorkflowClientFactoryImpl(); 

    @Before 
    public void setUp() throws Exception { 

     trace = new ArrayList<String>(); 
     // Register activity implementation to be used during test run 
     SomeActivitiesImpl activitiesImpl = new SomeActivitiesImpl() { 

     @Override 
     public SomeObject performHostRecovery(String abc) { 
      trace.add("ABC: " + abc); 
      SomeObject testObject = new SomeObject(); 
      return testObject; 
     } 
    }; 
    workflowTest.addActivitiesImplementation(activitiesImpl); 
    workflowTest.addWorkflowImplementationType(SomeWorkflowImpl.class); 
} 

@Test 
public void testWorkflowExecutionCall() throws Throwable { 

      SomeWorkflowClient workflow = workflowFactory.getClient("XZY"); 
    workflow.execute("XYZ"); 

    List<String> expected = new ArrayList<String>(); 
    expected.add("ABC: abc"); 

    AsyncAssert.assertEqualsWaitFor("Wrong Wrong", expected, trace, null); 
} 

}

. 그러나 내가 테스트 (execute())하고있는 메소드는 같은 클래스에있는 다른 메소드를 호출하고있다. 나는 내부 메소드의 실행에 관심이 없으며 그것을 조롱하고 싶다.하지만 워크 플로우 클래스 객체가 인스턴스화되는 방식을 고려할 때, 내부 메소드를 조롱하는 방법은 분명하지 않다.

누군가가 이것을 지적 할 수 있습니까?

감사

답변

0

당신은 실제로 워크 플로 개체 또는 워크 플로우 시험 방법 내에서 사용하는 다른 개체를 인스턴스화 할 수 있습니다

@Test 
public void testWorkflowExecutionCall() throws Throwable { 
    SomeWorkflow workflow = new SimpleWorkflow(...); 
    workflow.execute("XYZ"); 

    List<String> expected = new ArrayList<String>(); 
    expected.add("ABC: abc"); 

    AsyncAssert.assertEqualsWaitFor("Wrong Wrong", expected, trace, null); 
} 

WorkflowTest는 더미 테스트 워크 플로우의 맥락에서 시험 방법을 실행하기 때문에 작동 . 코드

SomeWorkflowClient workflow = workflowFactory.getClient("XZY"); 
workflow.execute("XYZ"); 

은 실제로이 더미 워크 플로의 컨텍스트에서 하위 워크 플로를 만듭니다. 하지만 자식 워크 플로를 만들지 않고도 비동기 코드를 직접 실행할 수는 없습니다.