Я читаю эту документацию по PowerMockito, и в ней есть два основных примера:
- Имитация статических методов
- Частично издевательство над классом
но я хочу знать, как издеваться над всем классом, созданным с помощью new
. Я ищу версию метода mock
Mockito для PowerMockito. Это должно каким-то образом заменить new Foo()
в моем производственном коде на Mockito mock(Foo.class)
. Вот что я пробовал:
import com.PowerMockitoProduction;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpMethod;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import static org.mockito.Matchers.any;
import static org.powermock.api.mockito.PowerMockito.when;
@RunWith(PowerMockRunner.class)
@PrepareForTest(PowerMockitoProduction.class)
public class PowerMockitoTest {
@Test(expected = UnsupportedOperationException.class)
public void test() throws Exception {
HttpClient mock = PowerMockito.mock(HttpClient.class);
when(mock.executeMethod(any(HttpMethod.class))).thenThrow(UnsupportedOperationException.class);
new PowerMockitoProduction().createClient();
}
}
Этот тест терпит неудачу с этим:
java.lang.Exception: Unexpected exception, expected<java.lang.UnsupportedOperationException> but was<java.lang.IllegalArgumentException>
Вот мой производственный код:
package com;
import org.apache.commons.httpclient.HttpClient;
import java.io.IOException;
public class PowerMockitoProduction {
public void createClient() throws IOException {
HttpClient client = new HttpClient();
client.executeMethod(null);
System.out.println(client);
}
}
С моим отладчиком я вижу, что client
не макет, как я ожидал.
Я также пытался использовать:
Object mock = PowerMockito.whenNew(HttpClient.class).withNoArguments().getMock();
Но по какой-то причине это возвращает макет, который не полностью построен. Я также пробовал это:
HttpClient mock = PowerMockito.whenNew(HttpClient.class).withNoArguments().thenReturn(mock(HttpClient.class)).getMock();
Но это дает мне ClassCastException
в этой строке. Итак, как правильно полностью смоделировать класс с помощью PowerMockito?
В отличие от этого примера, причина, по которой я пытаюсь смоделировать HttpClient, заключается в том, что я могу вызвать его verify
позже.
mock
Mockito для PowerMockito. - person Daniel Kaplan   schedule 23.02.2015getMock()
послеthenReturn()
. - person Rohit Jain   schedule 23.02.2015thenReturn
не возвращаетHttpClient
. Я хочуverify
на макете. - person Daniel Kaplan   schedule 23.02.2015