Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/223.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 基于MVVM模式的android单元测试响应_Java_Android_Unit Testing_Android Mvvm - Fatal编程技术网

Java 基于MVVM模式的android单元测试响应

Java 基于MVVM模式的android单元测试响应,java,android,unit-testing,android-mvvm,Java,Android,Unit Testing,Android Mvvm,我试图在android中使用MVVM模式时为存储库编写单元测试 我拥有的是一个存储库,它使用改造从网络中获取数据 public class ValidateCbuRepository { private static ValidateCbuRepository single_instance = null; private MutableLiveData<CBUValidationImageResponse> data = new MutableLiveDa

我试图在android中使用MVVM模式时为存储库编写单元测试

我拥有的是一个存储库,它使用改造从网络中获取数据

   public class ValidateCbuRepository {

    private static ValidateCbuRepository single_instance = null;

    private MutableLiveData<CBUValidationImageResponse> data = new MutableLiveData<>();

    public static ValidateCbuRepository getInstance() {
        if (single_instance == null)
            single_instance = new ValidateCbuRepository();

        return single_instance;
    }

    public MutableLiveData<CBUValidationImageResponse> processImage(String encodedString) {

        JsonObject postParam = new JsonObject();
        postParam.addProperty("image", encodedString);

        Api service = RetrofitClientInstance.getRetrofitInstance().create(Api.class);
        data.setValue(null);

        HttpUrl httpUrl = HttpUrl.parse("some url");
        Call<CBUValidationImageResponse> responseCall = service.getProcessedImage_cbu_validation(httpUrl.toString(),postParam);
        responseCall.enqueue(new Callback<CBUValidationImageResponse>() {
            @Override
            public void onResponse(Call<CBUValidationImageResponse> call, Response<CBUValidationImageResponse> response) {
                if(response.isSuccessful()) {
                    CBUValidationImageResponse res = response.body();
                    CBUValidationImageResponse cbuValidationImageResponse = res;
                    Log.i("CBU response ",""+cbuValidationImageResponse.toString());
                    cbuValidationImageResponse.setSuccess(true);
                    cbuValidationImageResponse.setShowProgres(false);
                    cbuValidationImageResponse.setError(false);
                    data.setValue(cbuValidationImageResponse);
                }
            }

            @Override
            public void onFailure(Call<CBUValidationImageResponse> call, Throwable t) {
                CBUValidationImageResponse cbuValidationImageResponse = new CBUValidationImageResponse();
                cbuValidationImageResponse.setError(true);
                cbuValidationImageResponse.setShowProgres(false);
                data.setValue(cbuValidationImageResponse);
                t.printStackTrace();
            }
        });
        return data;
    }
}
public类validatecbreapository{
私有静态ValidateCBreapository单_实例=null;
私有MutableLiveData=new MutableLiveData();
公共静态ValidateCBreapository getInstance(){
if(单实例==null)
single_instance=new validatecbreapository();
返回单_实例;
}
公共可变LiveData processImage(字符串编码字符串){
JsonObject postParam=新的JsonObject();
postParam.addProperty(“图像”,编码字符串);
Api服务=RefughtClientInstance.GetRefughtInstance().create(Api.class);
data.setValue(空);
HttpUrl HttpUrl=HttpUrl.parse(“某个url”);
Call responseCall=service.getProcesseImage\u cbu\u验证(httpUrl.toString(),postParam);
responseCall.enqueue(新的回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.issusccessful()){
CBUValidationImageResponse res=response.body();
CBUValidationImageResponse CBUValidationImageResponse=res;
Log.i(“CBU响应”,“”+cbuValidationImageResponse.toString());
cbuValidationImageResponse.setSuccess(true);
cbuValidationImageResponse.setShowProgres(假);
cbuValidationImageResponse.setError(false);
数据设置值(cbuValidationImageResponse);
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
CBUValidationImageResponse CBUValidationImageResponse=新的CBUValidationImageResponse();
cbuValidationImageResponse.setError(true);
cbuValidationImageResponse.setShowProgres(假);
数据设置值(cbuValidationImageResponse);
t、 printStackTrace();
}
});
返回数据;
}
}
单元测试部分

 @Mock
    private Observer<CBUValidationImageResponse> observer;

    @Before
    public void setup() {
        MockitoAnnotations.initMocks(this);

    }


    @Test
    public void testApiResponse_success() {
        Api mockedApiInterface = Mockito.mock(Api.class);
        Call<CBUValidationImageResponse> mockedCall = Mockito.mock(Call.class);

        Mockito.when(mockedApiInterface.getProcessedImage_cbu_validation(any(),any())).thenReturn(mockedCall);
        try {
            Mockito.doAnswer(new Answer() {
                @Override
                public Void answer(InvocationOnMock invocation) throws Throwable {
                    Callback<CBUValidationImageResponse> callback = invocation.getArgument(0);

                    CBUValidationImageResponse cbuValidationImageResponse = new CBUValidationImageResponse();
                    cbuValidationImageResponse.setCBU_code("some code");
                    cbuValidationImageResponse.setHeight(7);
                    cbuValidationImageResponse.setBreadth(7);
                    cbuValidationImageResponse.setLength(7);

                    callback.onResponse(mockedCall, Response.success(cbuValidationImageResponse));
                    // or callback.onResponse(mockedCall, Response.error(404. ...);
                    // or callback.onFailure(mockedCall, new IOException());
                    return null;
                }
            }).when(mockedCall).enqueue(any(Callback.class));

            ValidateCbuRepository validateCbuRepository = new  ValidateCbuRepository();
            String encodedString= "";
            validateCbuRepository.processImage(encodedString).observeForever(observer); 
@Mock
私人观察员;
@以前
公共作废设置(){
initMocks(this);
}
@试验
公共无效测试响应成功(){
Api mockedApiInterface=Mockito.mock(Api.class);
Call mockedCall=Mockito.mock(Call.class);
Mockito.when(mockedApiInterface.getProcessedImage\u cbu\u验证(any(),any())。然后返回(mockedCall);
试一试{
Mockito.doAnswer(新答案(){
@凌驾
公共Void应答(invocationmock调用)抛出可丢弃的{
Callback Callback=invocation.getArgument(0);
CBUValidationImageResponse CBUValidationImageResponse=新的CBUValidationImageResponse();
cbuValidationImageResponse.setCBU_代码(“某些代码”);
cbuValidationImageResponse.设定高度(7);
cbuValidationImageResponse.setbreath(7);
cbuValidationImageResponse.setLength(7);
onResponse(mockedCall,Response.success(cbuValidationImageResponse));
//或callback.onResponse(mockedCall,Response.error)(404…);
//或callback.onFailure(mockedCall,newioexception());
返回null;
}
}).when(mockedCall).enqueue(any(Callback.class));
validatecbreapository validatecbreapository=新的validatecbreapository();
字符串encodedString=“”;
ValidateCBreapository.processImage(encodedString).ObserveForRever(observer);
validatecbreapository.processImage(encodedString).observeforevir(observer)
处获取空指针异常。下一步是验证该观察者

我希望测试能通过。我做错了什么?我做了一些类似于foe视图模型的事情,测试以100%的代码覆盖率通过

改装调用是异步的。这就是它失败的原因吗


编辑:在测试导致NPE时,livedata似乎为null。

在单元测试中,您似乎忽略了以下规则:@estn修复了NPE的问题。但在测试observer onChanged值为null时,让我们尝试另一件事-将该模拟观察者订阅移动到@Before