2017-04-06 72 views
2

長話短說,我需要測試在AsyncTask的「doInBackground」方法中執行的代碼。有沒有辦法在AsyncTask的抽象類保護方法中單元測試代碼?

這在Android Studio與PowerMockito/Mockito/Robolectric/JUnit4。

我知道測試書面代碼是不是很理想,
但我沒有在這個詞,我不能改變原來的代碼。

這種情況:

public void methodToTest(){ 
    new AsyncTask<Integer, Void, Boolean>() { 
     @Override 
     protected Boolean doInBackground(Integer... integers) { 

      //How to test code written over here ? 

      return false; 
     } 
    } 
    } 

有沒有辦法解決這個問題的方法嗎? 任何建議,非常讚賞

+0

您是否看到http://stackoverflow.com/questions/15035850/testing-async-tasks-with-robolectric? –

+0

@EugenMartynov在我的Google任務中,我沒有遇到過那個人。如果我是正確的,那麼這是關於驗證AsyncTask本身的?我的目標是測試AsyncTask的doInBackground方法中使用的代碼。如果我錯了,請糾正我。 – user2417217

+0

啊,我錯過了你想測試抽象類。您可以隨時在測試中擴展它,並在需要時以虛擬方式實現抽象方法 –

回答

0

有一個但在這裏工作繞道:反思。

問題是:上面的代碼聲明瞭一個匿名的內部類。但事情是:即使匿名內部類也有一個唯一的,定義的名稱。

使用反射,完全可以實例化這種匿名內部類的對象。

你可以看看here瞭解如何工作。

歸結爲:當您能夠實例化包含methodToTest()的類的對象時;那麼你也可以實例化該內部類的對象。然後你應該可以調用這些對象的方法。

但即使這種方法有效並且可以讓您進行合理的單元測試:您可能希望向編寫生產代碼的人員展示這些測試。爲了讓他們清楚他們的不願意寫什麼樣的傷害可測試生產代碼正在造成!

+0

非常感謝您提供詳細的答案。 由於這種情況不好,我一定會討論這個問題。 但在此期間,我會查看提供的示例並查看它是否有效! – user2417217

相關問題