ClassCastException для отключения HttpURLConnection, приведенного из URLConnection с PowerMockito - PullRequest
0 голосов
/ 03 июля 2018

Мое соединение отлично работает с:

URLConnectionFactory hadoopConnectionFactory = URLConnectionFactory.newDefaultURLConnectionFactory(cfg);
String url = "...";
URLConnection urc = hadoopConnectionFactory.openConnection(new URL(url));
urc.connect();
// Do something with urc.getInputStream()

И у меня есть тест с @RunWith(PowerMockRunner.class) и @PrepareForTest({URLConnectionFactory.class}):

PowerMockito.mockStatic(URLConnectionFactory.class);
URLConnectionFactory hadoopConnectionFactory = PowerMockito.mock(URLConnectionFactory.class);
PowerMockito.when(URLConnectionFactory.newDefaultURLConnectionFactory(anyObject())).thenReturn(hadoopConnectionFactory);
URLConnection urc = PowerMockito.mock(URLConnection.class);
PowerMockito.when(hadoopConnectionFactory.openConnection(anyObject())).thenReturn(urc);
PowerMockito.when(urc.getInputStream()).thenReturn(...);

С ОК.

Теперь я хочу закрыть соединение с помощью HttpURLConnection и метода connect (). Это прекрасно работает в коде:

HttpURLConnection conn = (HttpURLConnection) urc;
conn.disconnect();

Но в тесте не может быть брошено:

java.lang.ClassCastException: $java.net.URLConnection$$EnhancerByMockitoWithCGLIB$$6fcf4cc9 cannot be cast to java.net.HttpURLConnection

Как я могу поддержать приведение в тесте, чтобы отключить эту связь с PowerMockito?

Спасибо.

1 Ответ

0 голосов
/ 03 июля 2018

Не проверено, но вместо:

URLConnection urc = PowerMockito.mock(URLConnection.class);

использование:

URLConnection urc = PowerMockito.mock(HttpURLConnection.class);

В противном случае ваш ложный класс не того типа.

...