2016-08-01 81 views
1

我知道cordova-plugin-test-framework將有助於測試任何cordova項目。 我正在開發適用於Android平臺的自定義相機cordova插件。我想爲我的自定義相機Android插件代碼編寫一些Junit/Instrumentation測試用例。 我面臨的問題,因爲我不能創建CordovaInterface,CordovaWebView我的測試類的對象。如何測試自定義cordova插件的本機代碼?

反正是有,我可以創建從我的測試類CordovaInterfaceCordovaWebView對象,並通過這些作爲我的自定義相機Android插件excute方法的參數。

我想避免使用cordova-plugin-test-framework在js級別的單元測試用例,並編寫一些Junit測試用例(因爲我可以訪問我的攝像頭cordova插件使用的大多數內部類)。請糾正我,如果這種錯誤的做法。

+0

找到方法有什麼好運? –

+0

@EaswaramoorthyK No.僅限使用cordova-plugin-test-framework。 – vrs

+0

好的。這很好,但無法找到代碼覆蓋率或將測試結果作爲報告導出。 –

回答

0

首先,將CordovaLib複製到您的插件項目作爲庫。 添加類似以下內容到您的Test類:

首先,一個活動,不要忘記將它添加到AndroidMainfest.xml進行測試。

public class TestActivity extends CordovaActivity { 

    CordovaWebView getWebView(){ 
     return this.appView; 
    } 
    CordovaInterface getInterface(){ 
     return this.cordovaInterface; 
    } 

    public void init(){ 
     super.init(); 
    } 
} 

在您的測試類:

@Rule 
public ActivityTestRule<CordovaActivity> mActivityRule = 
    new ActivityTestRule<CordovaActivity>(CordovaActivity.class); 



private CordovaWebView wv; 
private CordovaInterface cordovaInterface; 
private YourCordovaPlugin km; 
private TestActivity activity; 

@Before 
public void Init() throws InterruptedException { 
    km = new KM1930CordovaPlugin(); 
    activity = mActivityRule.getActivity(); 

    Runnable action = new Runnable() { 
     @Override 
     public void run() { 
      activity.init(); 
      wv = mActivityRule.getActivity().getWebView(); 
      cordovaInterface = mActivityRule.getActivity().getInterface(); 
      km = new YourCordovaPlugin(); 
      km.initialize(cordovaInterface,wv); 
      wv.getPluginManager().addService(new PluginEntry("YourServiceName",km)); 
      synchronized (this) { 
       this.notify(); 
      } 
     } 
    }; 
    synchronized(action) { 
     activity.runOnUiThread(action); 
     action.wait() ; 
    } 
} 

然後你就可以通過調用execute方法添加你的測試方法和調用方法。

@Test 
public void TestBluetooth() throws JSONException { 
     this.km.execute("echo","[]",new CallbackContext("0",wv)); 
} 
+0

如果你想得到回調結果,你應該創建自己的CordovaWebview類並重寫'sendPluginResult'方法 – Ayaka

相關問題