作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
长话短说,我需要测试在 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;
}
}
}
有办法解决吗?非常感谢任何建议
最佳答案
这里有一个丑陋但有效的弯路:反射。
重点是:上面的代码声明了一个匿名内部类。但事实是:即使是匿名内部类也有一个唯一的定义名称。
并且使用反射,完全可以实例化这种匿名内部类的对象。
可以看看here了解它是如何工作的。
归结为:当您能够实例化包含 methodToTest()
的类的对象时;那么您还可以实例化该内部类的对象。然后您应该能够在这些对象中的任何一个上调用方法。
但即使这有效并让您进行合理的单元测试:您可能希望向编写生产代码的人员展示这些测试。让他们清楚他们不愿意编写可测试生产代码会造成什么样的伤害!
关于android - 有没有办法在 AsyncTask 的抽象类保护方法中对代码进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43255066/
我是一名优秀的程序员,十分优秀!