我正在使用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();

最佳答案

因此事实证明,我试图对最终方法进行存根(如果您查看定义,则为AsyncTask.get())。
使用Mockito,不可能模拟最终方法。
问题是我无法找出代码为什么挂起,这肯定是Mockito的错误。

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

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

10-16 19:22