Java 如何为以下代码编写单元测试用例?我已经模仿了我的restclient(使用改型),但是如何进行单元测试回调? RestClient.getInstance().getAllLeads(6,新的RestCallback(LeadsHttpAdapter.class){ @凌驾 公共无效失败(RestError RestError){ } @凌驾 public void restsucture(对象o){ ArrayList LeadCardsList=(ArrayList)o; LeadsListAdapter LeadsListAdapter=新的LeadsListAdapter(getActivity(),LeadCardsList); LeadsListView.setAdapter(leadsListAdapter); LeadsListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){ @凌驾 public void onItemClick(AdapterView父对象、视图、整型位置、长id){ Intent Intent=新的Intent(getActivity(),LeadOfferDetails.class); 星触觉(意向); } }); } });
这写在我的活动类函数中,我将RestClient作为参数传递给该函数,因此在对函数进行单元测试时,我将传递模拟客户端。如何测试回调,因为在调用回调时,我的测试函数已超出范围 我认为您不需要新的测试框架。将Java 如何为以下代码编写单元测试用例?我已经模仿了我的restclient(使用改型),但是如何进行单元测试回调? RestClient.getInstance().getAllLeads(6,新的RestCallback(LeadsHttpAdapter.class){ @凌驾 公共无效失败(RestError RestError){ } @凌驾 public void restsucture(对象o){ ArrayList LeadCardsList=(ArrayList)o; LeadsListAdapter LeadsListAdapter=新的LeadsListAdapter(getActivity(),LeadCardsList); LeadsListView.setAdapter(leadsListAdapter); LeadsListView.setOnItemClickListener(新的AdapterView.OnItemClickListener(){ @凌驾 public void onItemClick(AdapterView父对象、视图、整型位置、长id){ Intent Intent=新的Intent(getActivity(),LeadOfferDetails.class); 星触觉(意向); } }); } });,java,android,unit-testing,retrofit,Java,Android,Unit Testing,Retrofit,这写在我的活动类函数中,我将RestClient作为参数传递给该函数,因此在对函数进行单元测试时,我将传递模拟客户端。如何测试回调,因为在调用回调时,我的测试函数已超出范围 我认为您不需要新的测试框架。将restsucture(objecto)中的代码重构为自己的方法。将新方法放在外部类中。这种新方法很容易在jUnit中测试。经验法则是在任何回调代码中保持非常简单,只需一两行代码。您不需要测试是否调用了restsucture(对象o)。您可以假设它被调用,只测试代码,而不是框架 要获得额外的积分
restsucture(objecto)
中的代码重构为自己的方法。将新方法放在外部类中。这种新方法很容易在jUnit中测试。经验法则是在任何回调代码中保持非常简单,只需一两行代码。您不需要测试是否调用了restsucture(对象o)
。您可以假设它被调用,只测试代码,而不是框架
要获得额外的积分,请重构它自己的类,并为其编写jUnit测试 我会使用Mockito的
Mockito.verify()
和ArgumentCaptor.capture()
来触发回调
如果您不熟悉Mockito,并且更喜欢自己对rest客户端进行存根,那么假设您可以将TestRestClient
作为参数传递给您尝试测试的方法:
RestClient.getInstance().getAllLeads(6, new RestCallback<HashMap<String, Object>>(LeadsHttpAdapter.class) {
@Override
public void failure(RestError restError) {
}
@Override
public void restSuccess(Object o) {
ArrayList<Lead> LeadCardsList = (ArrayList) o;
LeadsListAdapter leadsListAdapter = new LeadsListAdapter(getActivity(), LeadCardsList);
LeadsListView.setAdapter(leadsListAdapter);
LeadsListView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
Intent intent = new Intent(getActivity(), LeadOfferDetails.class);
startActivity(intent);
}
});
}
});
类TestRestClient扩展了RestClient{
公共客体反应;
公共错误;
公共访问;
@凌驾
公共getAllLeads(整数,RestCallback){
如果(isSuccess){
restsucture(response);
}否则{
回调失败(错误);
}
}
}
TestRestClient testClient=新的TestRestClient();
testClient.issucess=true;
testClient.response=;
//通过在此处传递testClient来测试您的方法
不用说,
TestRestClient
应该保存在“test”源目录中,而不是生产代码中。但正如我所说,使用Mockito或等效的mock框架更可取。我会使用Mockito
或easymock
。您可以模拟restclient
和restcallback
。您可以将restcallback
传递给restclient
,并通过启动mocked
失败或restcsuccess
@JaredBurrows验证是否调用了回调。我没有使用mockito或easymock。创建了我自己的custiom类来模拟restclient。你可以在这里检查一下,我知道你没有使用那些测试套件,这就是为什么我说“我会使用”,所以你可以模拟返回值并触发交互,然后验证它们。@JaredBurrows很抱歉这么笨,但我怎么做呢。如何触发交互,然后进行验证?我是单元测试新手?任何例子都不要称自己为哑巴!我建议采用不同的测试方法。我不确定什么是RestClient.getInstance().getAllLeads(
),类似这样的东西:。
class TestRestClient extends RestClient {
public Object response;
public RestError error;
public boolean isSuccess;
@Override
public getAllLeads(int number, RestCallback<HashMap<String, Object>> callback) {
if (isSuccess) {
callback.restSuccess(response);
} else {
callback.failure(error);
}
}
}
TestRestClient testClient = new TestRestClient();
testClient.isSuccess = true;
testClient.response = <your-response>;
// test your method by passing testClient here