2014-12-22 6 views
1

Я новичок в тестировании Android. Все, что я сейчас делаю, это новый Espresso с Junit4. то, что я до сих пор хожу, это Espresso для тестирования ui, и с junit мы можем провести логическое тестирование. Поэтому я пытаюсь JUnit, чтобы проверить мой модифицированного кода:Android: тест на успех, неудача

protected String signIn(String emailNumber, String password) { 

    RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(Constants.API_URL).build(); 
    RetroInterface retroInterface = restAdapter.create(RetroInterface.class); 

    retroInterface.signIn(emailNumber, password, new Callback<SignInPojo>() { 
     @Override 
     public void success(SignInPojo signInPojo, Response response) { 
      if (signInPojo.getError()) { 
       Snackbar.with(getApplicationContext()).text(signInPojo.getMessage()) 
         .textColor(getResources().getColor(R.color.red_400)).show(SignInActivity.this); 
       result = "successerror"; 

      } else { 
       Log.d("Json", signInPojo.getName()); 
       result = "Successfully Signed In"; 
       editor = sharedPreferences.edit(); 
       editor.putBoolean(Constants.IS_LOGGED_IN, true); 
       editor.apply(); 
       startActivity(new Intent(getApplicationContext(), LenderActivity.class)); 
       finish(); 
      } 
     } 

     @Override 
     public void failure(RetrofitError error) { 
      Log.d("RetroError", error.toString()); 
      Log.d("RetroUrl", error.getUrl()); 
      result = "failed"; 
     } 
    }); 
    return result; 
} 

с этим тестом: SignInActivityJunit.java

import android.support.test.InstrumentationRegistry; 
import android.support.test.runner.AndroidJUnit4; 
import android.test.ActivityInstrumentationTestCase2; 
import android.test.suitebuilder.annotation.SmallTest; 

import org.junit.Before; 
import org.junit.Test; 
import org.junit.runner.RunWith; 

import static org.hamcrest.CoreMatchers.equalTo; 
import static org.hamcrest.CoreMatchers.is; 
import static org.junit.Assert.assertThat; 

@RunWith(AndroidJUnit4.class) 
@SmallTest 
public class SignInActivityJunit extends ActivityInstrumentationTestCase2<SignInActivity>{ 
    private SignInActivity signInActivity; 

    public SignInActivityJunit() { 
     super(SignInActivity.class); 
    } 

    @Before 
    public void setUp() throws Exception { 
     super.setUp(); 
     injectInstrumentation(InstrumentationRegistry.getInstrumentation()); 
     signInActivity = getActivity(); 
    } 

    @Test 
    public void checkSignIn_Success() { 
     String result = signInActivity.signIn("99929992", "aaaaaaaa"); 
     assertThat(result, is(equalTo("success"))); 
    }@Test 
    public void checkSignIn_SuccessButError() { 
     String result = signInActivity.signIn("99929992", "aaaaaaaa"); 
     assertThat(result, is(equalTo("successerror"))); 
    }@Test 
    public void checkSignIn_Fail() { 
     String result = signInActivity.signIn("99929992", "aaaaaaaa"); 
     assertThat(result, is(equalTo("success"))); 
    } 

    @Override 
    protected void tearDown() throws Exception { 
     super.tearDown(); 
    } 
} 

Теперь эти все случаи не удались, потому что на отладке, я увидел, что они не ожидают, пока сеть вернет вызов (согласно моему предположению). Они пропускают успех и отказ методов. Итак, вопрос в том, как сделать модульное тестирование до тех пор, пока модификация не вернет запрос. Или есть другой эффективный способ протестировать эти сетевые подключения. Спасибо

ответ

0

Это не ответит на ваш вопрос, но я думаю, что более правильным способом тестирования веб-сервисов было бы издеваться над сервером и запросить его или на самом деле протестировать пользовательский интерфейс с помощью эспрессо.

В первом случае, с jUnit, вы не создаете фактический запрос, а скорее издевательский, который вернет заранее определенный результат (результат может быть прочитан из файла). Здесь вы можете проверить, что преобразование ответа в классы модели успешное, если оно у вас есть.

Во втором случае, с Espresso, протестируйте фактическую вещь на устройстве, например open LoginActivity -> введите поля ввода/имени пользователя -> введите текст -> нажмите кнопку «Войти». И как ожидаемый результат здесь вы могли бы поместить некоторые элементы управления из основного вида деятельности (тот, который перенаправляет вас после успешного входа в систему)

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