2012-10-17 3 views
2

우리는 Mule에서 사용자 지정 변환기에 대한 Junit 테스트 사례를 작성하려고했습니다. 하지만 테스트 클래스에서 doTransform() 메서드를 호출 할 수 없었습니다.뮬 사용자 지정 변환기의 단위 테스트 사례 작성 방법

나중에 우리는 Mule이 Unit 테스트 케이스에 대한 기능을 제공한다는 것을 알게되었습니다. 그리고 문서에 따라 구현할 몇 가지 방법이있는 AbstractTransformerTestCase을 확장했습니다.

그들은 :

@Override 
    public Transformer getTransformer() throws Exception { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public Transformer getRoundTripTransformer() throws Exception { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public Object getTestData() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

    @Override 
    public Object getResultData() { 
     // TODO Auto-generated method stub 
     return null; 
    } 

우리는 다음과 같은 것들에 대해 지금 혼란 :

  1. 경우 우리의 테스트 로직을 작성?
  2. & 어떻게 변압기에 입력을 보내겠습니까?
  3. 변압기에서 무엇이 반환됩니까?
  4. 변압기 (변압기가 변류기의 마지막 끝점이 됨)에서 아무것도 반환하지 않으면 어떻게됩니까?
  5. 테스트 사례를 "호출하는"방법은 무엇입니까?
  6. 맞춤 예외가 예상되는 테스트 케이스를 작성하는 방법은 무엇입니까?
  7. 이클립스 내부의 Junit 테스트에서 우리는 이것을 @Test(expected = RuntimeException.class)이라고 선언했지만, 어떻게 노새 유닛 테스트 케이스에서 그것을 수행 할 수 있습니까?
  8. AbstractTransformerTestCase 안에 기존의 '재정의 된 메소드'를 어떻게 사용할 수 있습니까 ??

도와주세요. 우리는 2 주 동안해야 할 일을 이해하지 못하고 있습니다.

답변

4

은 뮬에서 변압기는 다음과 같이 테스트하려면 :

  • org.mule.transformer.AbstractTransformerTestCase을 확장하고 추상 메소드 (look at the test for the Base64 transformer as a good example)를 구현합니다. 이것은 변압기의 기본 사항을 다룹니다.
  • 예를 들어 페이로드 나 속성이 다른 경우와 같이 더욱 포괄적 인 시나리오가있는 경우 org.mule.tck.junit4.FunctionalTestCase을 확장하여 기능 테스트 케이스를 만들고 표준 JUnit4 @Test 메서드를 만들어 변환기와 상호 작용할 수 있습니다 테스트 구성에서 구성되었습니다.
0

테스트를 시작할 때 테스트 구동 개발과 같은 우수 사례를 사용하여 시작할 수도 있습니다. 당신이 필요합니다 : 실제 버전

  • 의 JUnit (당신이 이미 그것을 가지고)
  • 현대 조롱 프레임 워크 (I 강하게 순간에 대부분의 유연한 도구 jmockit를 추천 할 것입니다)를

당신은 필요가 없습니다 : 노새에서

  • 추상 기본 테스트 클래스

트랜스포머 테스트를 작성할 때 트랜스포머가 올바르게 동작하는지 테스트하고 있습니다. 따라서 테스트 케이스에서 트랜스포머를 인스턴스화하고 일부 입력으로 변환 메쉬를 히트하고 결과에 어서션을 실행하십시오. 변압기가 노새가없이 인스턴스화 될 수 있고 트랜스 포밍하는 동안 공동 작업이 필요하지 않은 경우 일반 단위 테스트 만 수행하면됩니다.

뮬 (mule), Java EE 또는 기타 테스트 할 서브 시스템이 필요하면 여기 조롱이 사용됩니다. 서비스 인프라 스트럭처를 준비하는 대신에 mock을 제공하고 기대되는 클래스를 어떻게 정의 할 것인지를 정의합니다 (클래스를 테스트하거나 mulen 또는 JDBC 드라이버).여기에 또 다른 이상한 환경 (안드로이드)에 대한 단위 테스트의 예는 다음과 같습니다

/** 
* shall inject assignable views into class 
* note that mocks are specifuied as parameters 
*/ 
@Test 
public void testSimpleInjection(@Mocked final WithInjectableViews injectable, 
           @Mocked final TextView textView, 
           @Mocked final Button button) { 

    // we expect that certain methods will be called on mocked objects 
    new Expectations() { 
     { 
      injectable.findViewById(239); 
      returns(textView); 


      injectable.findViewById(555); 
      returns(button); 


     } 
    }; 

    // method under test 
    ViewInjector.startActivity(injectable); 

    // assertions 
    assertEquals(textView, Deencapsulation.getField(injectable, "asView")); 
    assertEquals(button, Deencapsulation.getField(injectable, "button")); 
    assertNull(Deencapsulation.getField(injectable, "notInjected")); 

} 

// class derived from android activity, base class is not instantiable 
// in normal java environment, only on the phone or emulator but this is not 
// practicable 
class WithInjectableViews extends Activity { 
    // shall be injected 
    @InjectView(id = 239) 
    private android.view.View asView; 
    @InjectView(id = 555) 
    private Button button; 
    // shall be left alone 
    private View notInjected = null; 

} 
관련 문제