Я использую Robolectrics и Mockito для тестирования проекта Android, я издеваюсь над методом, который делает HTTP-запрос на бэкэнд.Использование Robolectrics с Mockito для извлечения/завершения функции вызова вызова http-запроса, но это не работает
Фактический класс HTTP клиента:
public class MyHttpClient {
...
public int sendDataToBackend(Object data) {
return doHttpRequest(data);
}
private int doHttpRequest() {
System.out.println("start http request ...");
...
return responseCode;
}
}
выше MyHttpClient
класс используется в MyService
классе:
public class MyService {
...
public void notifyBackend(Object data) {
MyHttpClient client = new MyHttpClient();
int responseCode = client.sendDataToBackend(data);
...
}
}
I тест блок MyService
:
@RunWith(RobolectricTestRunner.class)
public class MyServiceTest {
@Mock
private MyHttpClient client;
@InjectMocks
private MyService service;
@Before
public void setUp() {
client = new MyHttpClient();
service = new MyService();
}
@Test
public void testNotifyBackend() {
Object data = generateData();
//stub method call
when(client.sendDataToBackend(data)).thenReturn(200);
service.notifyBackend(data);
}
}
Я бегу мой выше единицы теста, я ожидал, что sendDataToBackend()
фикция тело в MyHttpClient
классе не будет выполнено, так как мы издевались/окурком функции вернет 200, однако я все еще видит System.out.print()
сообщений:
start http request ...
из MyHttpClient#doHttpRequest()
, почему?
(И мой тест провален, потому что он пытается сделать реальный запрос HTTP)
====== UPDATE =======
Кроме того, я также думаю, что я не должен «т сделать client = new MyHttpClient
в setUp()
, потому что client
должны были издевались, но когда я попробовал:
@Before
public void setUp() {
service = new MyService();
}
Я получил NullPointerException в:
when(client.sendDataToBackend(data)).thenReturn(200);
,
, что причина, почему я добавить client = new MyHttpClient
в setUp()
. Я также хочу спросить, почему я получил NullPointerException, если насмехается client
?
С предоставленным фрагментом, 'MyService' даже использует' MyHttpClient'. Это намеренно? – Mureinik
@Mureinik, что вы имеете в виду? 'MyService # notifyBackend()' использует MyHttpClient, почему вы говорите, что он не использует класс http client? – user842225
Ну, теперь, после того, как вопрос был отредактирован ... – Mureinik