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);
}
});
}
});
这是在我的活动类函数中编写的,我将RestClient作为参数传递给该函数,因此在单元测试函数时我通过了模拟客户端。我如何测试回调,因为当回调被调用时,我的测试函数超出了范围。
答案 0 :(得分:0)
我认为您不需要新的测试框架。将restSuccess(Object o)
内的代码重构为自己的方法。将新方法放在外部类中。这个新方法很容易在jUnit中测试。经验法则是在任何回调代码中,只需要一行或两行就能保持简单。您不需要测试是否调用restSuccess(Object o)
。您可以假设它被调用,仅测试您的代码,而不是框架。
将额外的信用重构onItemClick()
添加到自己的类中,并为其编写jUnit测试。
答案 1 :(得分:0)
我会使用Mockito的Mockito.verify()
和ArgumentCaptor.capture()
来触发回调。
如果您不熟悉Mockito并且更喜欢自己存根其余客户端,那么假设您可以将TestRestClient
作为参数传递给您要测试的方法:
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
毋庸置疑,TestRestClient
应该留在您的测试中。源目录,而不是您的生产代码。但就像我说使用Mockito或等效的模拟框架会更好。