Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/372.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
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 - Fatal编程技术网

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 如何为以下代码编写单元测试用例?我已经模仿了我的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)。您可以假设它被调用,只测试代码,而不是框架 要获得额外的积分

这写在我的活动类函数中,我将RestClient作为参数传递给该函数,因此在对函数进行单元测试时,我将传递模拟客户端。如何测试回调,因为在调用回调时,我的测试函数已超出范围

我认为您不需要新的测试框架。将
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