由于 Mockito.doThrow,测试永远不会执行
Tests never get executed because of the Mockito.doThrow
我正在使用 Mockito
测试 anroid 应用程序。我想测试一个异常情况,但是方法 Mockito.doThrow
挂起并且测试永远不会执行(它既不失败也不成功)。
这是代码。 PackageDownloader
代表一个AsyncTask
。它的方法 get
在 downloadPackage
方法内部被调用。但是执行永远不会到那一点,因为它恰好挂在 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,不可能模拟 final 方法。
问题是我无法找出代码挂起的原因,这肯定是 Mockito 的错误。
我通过在 downloadPackage
方法调用之后放置 doThrow
来发现问题。
我正在使用 Mockito
测试 anroid 应用程序。我想测试一个异常情况,但是方法 Mockito.doThrow
挂起并且测试永远不会执行(它既不失败也不成功)。
这是代码。 PackageDownloader
代表一个AsyncTask
。它的方法 get
在 downloadPackage
方法内部被调用。但是执行永远不会到那一点,因为它恰好挂在 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,不可能模拟 final 方法。
问题是我无法找出代码挂起的原因,这肯定是 Mockito 的错误。
我通过在 downloadPackage
方法调用之后放置 doThrow
来发现问题。