有没有办法在 AsyncTask 的抽象 class 保护方法中对代码进行单元测试?

Is there a way to unit-test code in abstract class protected method of AsyncTask?

长话短说,我需要测试在 AsyncTask 的 "doInBackground" 方法中执行的代码。

这在 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;
        }
     }
  }

有办法解决吗? 非常感谢任何建议

有一个丑陋但在这里绕行:反射。

重点是:上面的代码声明了一个匿名内部class。但事实是:即使是匿名内部 classes 也有一个唯一的、定义好的名称。

并且使用反射,完全可以实例化这种匿名内部 classes 的对象。

您可以查看 以了解其工作原理。

归结为:当您能够实例化包含 methodToTest() 的 class 的对象时;那么您还可以实例化该内部 class 的对象。然后您应该能够在这些对象中的任何一个上调用方法。

但即使这有效并让您进行合理的单元测试:您可能希望向编写生产代码的人员展示这些测试。让他们清楚他们不愿意编写可测试生产代码会造成什么样的伤害!