2014-12-22 104 views
1

我是Android测试的新手。我现在正在尝试使用Junit4新建Espresso。我到现在为止的事情是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

这不会回答你的问题,但我认为一个更正确的测试Web服务的方法是模拟服务器和请求,或者用espresso实际测试UI。

在第一种情况下,使用jUnit,您不会创建实际的请求,而是创建一个会返回预先结果(可以从文件中读取结果)的模拟对象。在这里,您可以测试如果您有任何模型类的响应转换成功。

在第二种情况下,使用Espresso测试设备上的实际事物,例如打开LoginActivity - >检索登录/用户名字段 - >键入文本 - >单击登录按钮。正如预期的结果,您可以在主要活动(成功登录后重定向您的那个活动)中添加一些控件

相关问题