2016-05-14 4 views
1

Я пытаюсь создать единичный корпус для модификации 2 обратных вызовов в android. Я использую для тестирования mockito, MockWebServer и MockResponse.Как я могу выполнить модульное тестирование для повторных обратных вызовов?

public class LoginFragment extends Fragment { 
/** 
    * Actualiza el numero telefonico para el usuario 
    * 
    * @param phoneNumber 
    */ 
    public void phoneNumber(String phoneNumber) { 
     HttpService service = Service.createService(HttpService.class, TOKEN); 
     Call<Void> call = service.phonumber(phoneNumber, new User("", "")); 
     call.enqueue(callback()); 
    } 

    /** 
    * @return Callback<Void> 
    */ 
    public Callback<Void> callback() { 
     return new Callback<Void>() { 
      @Override 
      public void onResponse(Call<Void> call, Response<Void> response) { 
       if (response.isSuccessful()) { 
        dummy(); 
       } else { 
        Log.e(TAG, "problema"); 
       } 
      } 

      @Override 
      public void onFailure(Call<Void> call, Throwable t) { 
       Log.e(TAG, " " + t); 
      } 
     }; 
    } 

    public void dummy(){ 
     System.out.println(" called"); 
    } 
} 

Мой UniTest класс:

@RunWith(MockitoJUnitRunner.class) 
public class TestLoginFragment { 
    MockWebServer mockWebServer; 

    @Before 
    public void setup() throws Exception { 
     spyLoginFragment = mock(LoginFragment.class); 
     mockWebServer = new MockWebServer(); 
    } 


    @Test 
    public void testDummyIsCalled() { 
     spyLoginFragment.phoneNumber("3333335"); 
     mockWebServer.enqueue(new MockResponse().setResponseCode(201)); 
     verify(spyLoginFragment, times(1)).dummy(); 
    } 
} 

Но при запуске теста я получаю:

TestLoginFragment > testDummyIsCalled FAILED 
    Wanted but not invoked: 
    loginFragment.dummy(); 

Я новый тест решений обратного вызова, как я могу проверить, что dummy() был назван ?

+0

Это будет намного проще, если вы просто вызовете execute(), который будет выполнять запрос синхронно. Что вы планируете тестировать? Что работает клиент-клиент, или ответ вашего приложения на его успех/неудачу? – fractalwrench

+0

привет @ fractalwrench, я пытаюсь проверить ответ (успех/неудачу), проверяя, что functon dummy() был вызван. как я могу назвать execute()? – Hash

+0

Просто выполните call.execute(), стоит ли проверять документы дооснащения, если вы не уверены в различии между execute() и enqueue() – fractalwrench

ответ

0

По определению, модульный тест проверяет только функциональность самих устройств. Поэтому он может не улавливать ошибки интеграции.

Вы не должны проверять фреймворк или его обратные вызовы, вы должны полагать, что модернизация всегда работает. Проверяйте свой код, поэтому создайте тест для номера телефона (String phoneNumber), который проверяет, правильно ли настроена служба (не нужно запускать услугу модернизации), и создайте другие тестеры, чтобы проверить возможные ответы сервера на случаи OnSuccess или OnFailure.

PD: Если вы хотите протестировать связь между вызовом Retrofit и методами обратного вызова, тогда вы говорите об «интеграционном тесте».

Смежные вопросы