我是Android测试新手。我现在尝试的只是使用Junit4的新Espresso。到目前为止,Espresso适用于ui测试,使用junit我们可以进行逻辑测试。所以我正在尝试使用Junit来测试我的改进代码:
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 :(得分:0)
这不会回答你的问题,但我认为更正确的测试网络服务的方法是模拟服务器和请求,或用浓咖啡实际测试用户界面。
在第一种情况下,使用jUnit
,您不会创建实际请求,而是会返回预定义结果的模拟请求(结果可以从文件中读取)。在这里,您可以测试对模型类的响应转换是否成功,如果有的话。
在第二种情况下,使用Espresso
,测试设备上的实际内容,例如打开LoginActivity - &gt;检索登录/用户名字段 - &gt;输入文字 - &gt;单击“登录”按钮。正如预期的结果,您可以在主要活动中设置一些控件(在成功登录后重定向您的控件)