如何对api调用进行单元测试?

我试图为每一段可能的代码集成单元测试用例。
但是,我在为通过改造而进行的api调用添加测试用例时遇到了问题。

JUnit编译器从不执行回调函数中的代码

还有另一种方法可以使所有api调用同步,以进行测试,但这不可能适用于我的应用程序中的所有情况

我怎样才能解决这个问题?我必须以任何方式在api调用中添加测试用例

我使用Mockito、Robolectric和Hamcrest库测试我的改装回调

首先,在模块的build.gradle中设置lib堆栈:

依赖项{
testCompile’org.roblectric:roblectric:3.0′
testCompile“org.mockito:mockito核心:1.10.19”
androidTestCompile’org.hamcrest:hamcrest库:1.1′
}

在jour项目的global build.gradle中,将以下行添加到buildscript依赖项:

classpath'org.roblectric:roblectric gradle插件:1.0.1'

然后在androidstudio中进入“buildvariants”菜单(要快速找到它,点击Ctrl+Shift+A并搜索),然后将“testartifact”选项切换到“unittests”。Android studio将把您的测试文件夹切换到“com.your.package(test)”(而不是androidTest)

嗯。设置完成了,是时候写一些测试了

假设您有一些改装api调用来检索需要放入某个适配器中的对象列表,以用于RecyclerView等。我们想测试适配器在成功调用时是否填充了适当的项。
要做到这一点,我们需要切换您的改型接口实现,您使用它来使用模拟进行调用,并利用Mockito ArgumentCaptor类进行一些虚假响应

@Config(常数=BuildConfig.class,sdk=21,
manifest=“app/src/main/AndroidManifest.xml”)
@RunWith(RobolectricGradleTestRunner.class)
公开课考试{
私人活动;
@嘲弄
私人改装空气污染指数改装空气污染指数;
@俘虏
private ArgumentCaptor<Callback<List<YourObject>>>callbackArgumentCaptor;
@以前
public void setUp(){
initMocks(this);
ActivityController<MainActivity>controller=Robolectric.buildActivity(MainActivity.class);
mainActivity=controller.get();
//然后,我们需要用一个模拟的api impl.来替换改型api impl
//我通常将改装api impl作为静态单例存储在RestClient类中,因此:
setApi(mockapimpl);
controller.create();
}
@试验
public void shouldFillAdapter()引发异常{
Mockito.verify(mockapimpl)
.getYourObject(callbackArgumentCaptor.capture());
int objectsQuantity=10;
List<YourObject>List=newarraylist<YourObject>();
对于(int i=0;i<objectsQuantity;++i){
添加(新的YourObject());
}
callbackArgumentCaptor.getValue().success(列表,空);
YourAdapter YourAdapter=mainActivity.getAdapter();//获取适配器
//简单的测试检查适配器是否有和放入响应中一样多的项
断言(yourAdapter.getItemCount(),equalTo(objectsQuantity));
}
}

通过右键单击测试类并点击run继续测试

就这样。我强烈建议使用Robolectric(带有Robolectric gradle插件)和Mockito,这些LIB使测试android应用程序变得更加容易。
我从下面的博文中学到了这个方法。另外,请参考此答案

更新:如果您正在使用RxJava进行改装,请查看我关于这方面的其他回答

发表评论