2012-10-17 50 views
2

我們試圖爲Mule用戶定製變壓器編寫Junit測試用例。 但是我們無法在測試類中調用doTransform()方法。如何編寫用於mule定製變壓器的單元測試用例

後來我們意識到看到騾文件,騾給單元測試用例的功能。 並根據文件我們已擴展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. Where &如何將輸入發送到變壓器?
  3. 我們從變壓器回來了什麼?
  4. 如果我們沒有從變壓器返回任何東西(變壓器是流量中的最後一個終點)怎麼辦?
  5. 如何「調用」測試用例?
  6. 如何編寫需要自定義異常的測試用例?
  7. 在eclipse中的Junit測試中,我們用它來聲明它爲@Test(expected = RuntimeException.class),但是如何在mule單元測試用例中做到這一點?
  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方法來與所述變壓器(S)相互作用更高級的方案,你將已經在測試配置中進行了配置。
0

當你從測試開始時,你可能會從採用像測試驅動開發的良好實踐開始。你將需要:在實際的版本

  • 的JUnit(你已經知道了)
  • 現代模擬框架(我會強烈建議jmockit作爲最靈活的工具,此刻)

你不需要:從騾

  • 抽象測試基類

當你編寫轉換器測試時,你正在測試你的轉換器的行爲是否正確(好,它將一個對象轉換爲另一個對象) - 所以在你的測試案例中,你只需實例化你的轉換器並用一些輸入命中轉換方法並對結果執行斷言。如果您的變壓器可以實例化而不需要騾子,並且在變換時不需要協作,那麼您只需進行簡單的單元測試。

如果您需要與mule,Java EE或任何需要測試它們的子系統進行協作 - 這裏嘲笑來了。您只需提供模擬並定義期望您的課程如何與他們合作(您正在測試您的課程,無需使用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; 

} 
相關問題