在Android中使用假http响应测试活动

在Android中使用假http响应测试活动,android,testing,android-async-http,Android,Testing,Android Async Http,我有一个要注册的活动。该活动获取用户的配置文件(如电子邮件和密码),然后将这些值上载到服务器。成功后,服务器将这些值返回给“活动”,以便“活动”将其保存到SharedReferences。 我的问题是,如何编写一个返回假响应的测试,以便活动不必与真实服务器交互,并检查值是否已完全保存到首选项 这是我的活动: 公共类RegisterActivity扩展AppCompatActivity实现RegisterRestClientUsage.RegisterCallback{ 专用注册表RestClie

我有一个要注册的活动。该活动获取用户的配置文件(如电子邮件和密码),然后将这些值上载到服务器。成功后,服务器将这些值返回给“活动”,以便“活动”将其保存到SharedReferences。
我的问题是,如何编写一个返回假响应的测试,以便活动不必与真实服务器交互,并检查值是否已完全保存到首选项

这是我的活动:

公共类RegisterActivity扩展AppCompatActivity实现RegisterRestClientUsage.RegisterCallback{
专用注册表RestClientUsage注册表RestClientUsage;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u寄存器);
registerRestClientUsage=新的registerRestClientUsage(此);
//...
}
公共void onClick(视图){
字符串email=emailEditText.getText().toString();
字符串密码=passwordEditText.getText().toString();
registerRestClientUsage.registerToServer(电子邮件、密码);
}
@凌驾
公共无效注册表成功(字符串令牌、字符串电子邮件){
//将这些值保存到SharedReferences
完成();
}
@凌驾
公共无效注册邮件(){
完成();
}
}
RegisterClientUsage.class

公共类RegisterRestClientUsage{
私有寄存器回调;
公共接口寄存器回调{
无效注册表成功(字符串令牌、字符串电子邮件);
无效注册表项();
}
公共RegisterRestClientUsage(RegisterCallback r){
回调=r;
}
公共无效注册服务器(字符串电子邮件、字符串密码){
RequestParams params=新的RequestParams();
参数put(“电子邮件”,电子邮件);
参数put(“密码”,密码);
BaseRestClient.post(“api/users/sign_up”,参数,新的AsyncHttpResponseHandler(){
@凌驾
成功时的公共void(int statusCode,Header[]headers,byte[]responseBody){
试一试{
JSONObject responseJson=新JSONObject(新字符串(responseBy));
returnToken=responseJson.optString(“令牌”);
JSONObject userJson=responseJson.optJSONObject(“用户”);
returnEmail=userJson.optString(“电子邮件”);
registerSuccess(returnToken,returnEmail);
}捕获(JSONException e){
e、 printStackTrace();
}
}
@凌驾
public void onFailure(int statusCode,Header[]headers,byte[]responseBody,Throwable error){
callback.registerFail();
}
});
}
}  
BaseRestClient.class

公共类BaseRestClient{
公共静态最终字符串BASE_URL=”https://my.api.com/";
私有静态AsyncHttpClient=新的AsyncHttpClient();
公共静态void post(字符串url、RequestParams参数、AsyncHttpResponseHandler-responseHandler){
client.post(getAbsoluteUrl(url)、params、responseHandler);
}
}


由于RegisterRestClientUsage嵌入到RegisterActivity中,我找不到一个好方法将我的假服务器注入该活动。

多亏@geek90的帮助,我终于想出了一个解决方案。我只是用另一个控制器(
RegisterController.class
)包装了我真正的api实现(
RegisterRestClientUsage.class
):

公共类注册控制器{
专用注册服务器服务器端;
公共注册控制器(注册服务器r){
服务器端=r;
}
公共无效注册服务器(字符串电子邮件、字符串密码){
RequestParams params=新的RequestParams();
参数put(“电子邮件”,电子邮件);
参数put(“密码”,密码);
serverSide.registerToServer(参数);
}
} 
RegisterRestClientUsage.class
实现
RegisterServer
接口:

公共接口注册服务器{
无效注册服务器(字符串电子邮件、字符串密码);
}
RegisterActivity
onCreate()
方法中,使用参数
RegisterRestClientUsage

@覆盖
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u寄存器);
registerController=new registerController(new RegisterRestClientUsage(this));
//...
}
在这种情况下,我可以将api的伪实现存根到控制器中进行测试:

@RunWith(AndroidJUnit4.class)
公共类注册表活动测试{
FakerRegisterRestClientUsage FakerRegisterRestClientUsage;
@统治
public ActivityTestRule ActivityTestRule=新ActivityTestRule(RegisterActivity.class);
@以前
公共作废设置(){
Activity=activityTestRule.getActivity();
FakerRegisterRestClientUsage=新的FakerRegisterRestClientUsage((RegisterRestClientUsage.RegisterCallback)活动);
registerController=新的registerController(FakerRegisterRestClientUsage);
}
@试验
public void savePreferenceAfterRegistration(){
activity.runOnUiThread(新的Runnable(){
@凌驾
公开募捐{
registerController.registerToServer(“假姓名”、“假出生”、“假电子邮件”、“假性别”、“假PWD”文件);
}
});
waitForActionsToComplete();
//断言数据已正确保存到首选项
}
public void waitForActionsToComplete(){
倒计时闩锁信号=FakerRegisterRestClientUsage.signal;
试一试{
等待信号(30,时间单位秒);