Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/193.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
Android 空闲资源忙时测试UI_Android_Rx Java_Android Espresso_Android Testing_Ui Testing - Fatal编程技术网

Android 空闲资源忙时测试UI

Android 空闲资源忙时测试UI,android,rx-java,android-espresso,android-testing,ui-testing,Android,Rx Java,Android Espresso,Android Testing,Ui Testing,我是android测试新手,遇到了一个问题。我正在使用RxJava,为了测试UI,我正在使用IdlingResource。当空闲资源忙时,我无法测试UI 例如:我有一个按钮。我正在做一个请求。请求时,按钮将禁用。请求后,按钮处于启用状态。我想测试以下3个步骤: 按钮在请求之前启用 按钮在请求时被禁用(onCLick) 当请求结束且响应消息返回时,按钮被启用 如果你能在这个问题上帮助我,我将非常高兴 如果你需要更多关于我的问题的信息,请告诉我。我将编辑我的帖子据我所知,您正在尝试测试您的UI。如果

我是android测试新手,遇到了一个问题。我正在使用RxJava,为了测试UI,我正在使用IdlingResource。当空闲资源忙时,我无法测试UI

例如:我有一个按钮。我正在做一个请求。请求时,按钮将禁用。请求后,按钮处于启用状态。我想测试以下3个步骤:

  • 按钮在请求之前启用
  • 按钮在请求时被禁用(onCLick)
  • 当请求结束且响应消息返回时,按钮被启用
  • 如果你能在这个问题上帮助我,我将非常高兴


    如果你需要更多关于我的问题的信息,请告诉我。我将编辑我的帖子

    据我所知,您正在尝试测试您的UI。如果是这样,请确保您以正确的方式进行:

    1)。你不需要真正的请求。
    请理解,在类似情况下,您的测试必须始终具有相同的行为。换句话说,它必须给出相同的结果,即传递相同的输入参数。
    您现在的输入参数:
    1.1). 按钮在请求前已启用
    1.2). 按钮在请求过程中被禁用
    1.3). 请求后启用的按钮

    从这个列表中可以看出,您不需要执行真正的请求。对您来说,什么服务器将返回您(错误或成功)并不重要。你甚至不需要服务器。你所需要的只是一个“东西”,它的行为就像一个真正的服务器。换句话说,您必须模拟您的API客户机

    我想你是在使用改装。如果没有,则必须为客户端创建
    接口
    包装器。如果您正在使用改型,只需模拟您的
    界面

    假设您有下一个
    接口

    public interface ApiClient{
        @GET("/items")
        Observable<MyResponse> doSomeRequest();
    }
    
    您应该如何在测试中执行此操作:

    import static org.mockito.Mockito.*;
    
    在试验方法中:

    ApiClient apiMock = mock(ApiClient.class);
    when(apiMock.doSomeRequest())
                    .thenReturn(Observable.just(fakeResponse));
    

    您应该将
    apiMock
    传递给您尝试测试的
    Activity
    /
    Fragment

    怎么做见#2

    2.使用依赖注入(DI) 关于这件事我不会写太多。
    我只是建议您阅读有关的文档

    特别是,当您可以使用实际实现进行生产,使用模拟实现进行测试时,如何以这种方式组织项目:

    换句话说,当您要构建应用程序以供使用时,您提供了真正的依赖项(在您的情况下,它将是
    ApiClient
    的真正实现),并且当您要测试某些UI或业务逻辑时,您通过了模拟依赖项,这些依赖项在测试之前已经指定了行为


    这就是我想告诉你的一切。希望这有帮助,如果您还有其他问题,请告诉我。

    据我所知,您正在尝试测试您的UI。如果是这样,请确保您以正确的方式进行:

    1)。你不需要真正的请求。
    请理解,在类似情况下,您的测试必须始终具有相同的行为。换句话说,它必须给出相同的结果,即传递相同的输入参数。
    您现在的输入参数:
    1.1). 按钮在请求前已启用
    1.2). 按钮在请求过程中被禁用
    1.3). 请求后启用的按钮

    从这个列表中可以看出,您不需要执行真正的请求。对您来说,什么服务器将返回您(错误或成功)并不重要。你甚至不需要服务器。你所需要的只是一个“东西”,它的行为就像一个真正的服务器。换句话说,您必须模拟您的API客户机

    我想你是在使用改装。如果没有,则必须为客户端创建
    接口
    包装器。如果您正在使用改型,只需模拟您的
    界面

    假设您有下一个
    接口

    public interface ApiClient{
        @GET("/items")
        Observable<MyResponse> doSomeRequest();
    }
    
    您应该如何在测试中执行此操作:

    import static org.mockito.Mockito.*;
    
    在试验方法中:

    ApiClient apiMock = mock(ApiClient.class);
    when(apiMock.doSomeRequest())
                    .thenReturn(Observable.just(fakeResponse));
    

    您应该将
    apiMock
    传递给您尝试测试的
    Activity
    /
    Fragment

    怎么做见#2

    2.使用依赖注入(DI) 关于这件事我不会写太多。
    我只是建议您阅读有关的文档

    特别是,当您可以使用实际实现进行生产,使用模拟实现进行测试时,如何以这种方式组织项目:

    换句话说,当您要构建应用程序以供使用时,您提供了真正的依赖项(在您的情况下,它将是
    ApiClient
    的真正实现),并且当您要测试某些UI或业务逻辑时,您通过了模拟依赖项,这些依赖项在测试之前已经指定了行为

    这就是我想告诉你的一切。希望这对您有所帮助,如果您还有其他问题,请告诉我。

    除此之外还有一些小问题。我会使用
    主题
    作为“模拟”api。这允许您控制执行

    //setup your test 
    Subject<Response,Response> stubResponse = AsyncSubject.create();
    ApiClient apiMock = mock(ApiClient.class);
    when(apiMock.doSomeRequest()).thenReturn(stubResponse.asObservable());
    //check first condition that button is enabled before executing action
    //click on button
    //test your second condition that button is disabled while waiting for response
    stubResponse.onNext(fakeResponse); //return fake response
    stubResponse.onCompleted();
    //test your third condition that button is enabled when you get response back
    
    //设置您的测试
    Subject stubResponse=AsyncSubject.create();
    ApiClient apiMock=mock(ApiClient.class);
    when(apiMock.doSomeRequest())。然后返回(stubResponse.asObservable());
    //在执行操作之前,检查按钮已启用的第一个条件
    //点击按钮
    //测试在等待响应时按钮被禁用的第二个条件
    stubResponse.onNext(fakerresponse)//返回假响应
    stubResponse.onCompleted();
    //测试您的第三个条件,即当您得到响应时按钮已启用
    
    评论。不要在测试中使用
    sleep
    。它会减慢你的测试速度并增加片状

    少量添加到。我会使用
    主题
    作为“模拟”api。这允许您控制执行

    //setup your test 
    Subject<Response,Response> stubResponse = AsyncSubject.create();
    ApiClient apiMock = mock(ApiClient.class);
    when(apiMock.doSomeRequest()).thenReturn(stubResponse.asObservable());
    //check first condition that button is enabled before executing action
    //click on button
    //test your second condition that button is disabled while waiting for response
    stubResponse.onNext(fakeResponse); //return fake response
    stubResponse.onCompleted();
    //test your third condition that button is enabled when you get response back
    
    //设置您的测试
    Subject stubResponse=AsyncSubject.create();
    ApiClient apiMock=mock(ApiClient.class);
    当(apiMock.doSomeRequest())时,返回(stubResponse.asObservable