2017-04-06 37 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

相关问题