android - 由于 Mockito.doThrow,测试永远不会执行

标签 android testing android-asynctask mockito android-testing

我正在使用 Mockito 测试 anroid 应用程序。我想测试一个异常情况,但是方法 Mockito.doThrow 挂起并且测试永远不会执行(它既不失败也不成功)。

这是代码。 PackageDownloader 表示一个 AsyncTask。它的方法 getdownloadPackage 方法内部被调用。但是执行永远不会到那个点,因为它恰好卡在 doThrow 行。

PackageDownloader packageDownloader = new PackageDownloader();
PackageDownloader mockPackageDownloader = Mockito.spy(packageDownloader);
HttpURLConnection connectionMock = Mockito.mock(HttpURLConnection.class);
Mockito.doReturn(connectionMock)
       .when(mockPackageDownloader)
       .createConnection(Mockito.any(URL.class));
Mockito.doThrow(new InterruptedException()).when(mockPackageDownloader).get();
downloadPackage();

最佳答案

原来我是在尝试对 final方法进行 stub (如果您查看定义,就是 AsyncTask.get())。 使用 Mockito,不可能模拟 final 方法。 问题是我无法找出代码挂起的原因,这肯定是 Mockito 的错误。

我通过在 downloadPackage 方法调用之后放置 doThrow 发现了这个问题。

关于android - 由于 Mockito.doThrow,测试永远不会执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48303206/

相关文章:

android - 如何在 cordova 中禁用 gradle?

android - 使用 AsyncTask 实现并发?

ios - 如何在 Alamofire 响应上 XCTAssertEqual?

testing - 强制在另一个之前运行代码接受测试

java - 调用一堆 AsyncTask,有没有办法知道它们何时都完成显示消息?

android - 在 Android Studio 中编辑外部库

android - 如何从Android中的表情符号获取unicode?

angular - 我正在尝试使用 jasmine 和 angular 测试来自服务的 api 请求,但没有成功

android - 如何在 asynctask 中处理 UI?

java - 当我的 Android 应用程序在 Android 设备/模拟器上运行时,Jsoup 无法工作