Android 改进RxJava单元测试

Android 改进RxJava单元测试,android,unit-testing,mockito,rx-java,retrofit2,Android,Unit Testing,Mockito,Rx Java,Retrofit2,我正在使用Mosby库来实现MVP模式,同时为我的api调用进行改造和RxJava,几乎完全按照它所做的那样 我刚刚开始UI和单元测试,虽然在UI测试期间(使用MockWebServer)模拟api没有问题,但我不知道如何模拟api进行单元测试 我已经看过了答案,但它似乎仍在尝试进行真正的api调用,因为我看到它是在onError(网络异常)而不是onNext/onComplete上着陆的。如果我使用MockWebServer,它也会登陆onError,但不会登陆网络类型 我想要的:演示者调用a

我正在使用Mosby库来实现MVP模式,同时为我的api调用进行改造和RxJava,几乎完全按照它所做的那样

我刚刚开始UI和单元测试,虽然在UI测试期间(使用MockWebServer)模拟api没有问题,但我不知道如何模拟api进行单元测试

我已经看过了答案,但它似乎仍在尝试进行真正的api调用,因为我看到它是在onError(网络异常)而不是onNext/onComplete上着陆的。如果我使用MockWebServer,它也会登陆onError,但不会登陆网络类型

我想要的:演示者调用api时:

signUpSubscriber = api.signUpUser(credentials)
            .observeOn(AndroidSchedulers.mainThread())
            .subscribeOn(Schedulers.io())
            .subscribe(new Subscriber<User>()
signUpSubscriber=api.signUpUser(凭证)
.observeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.io())
.subscribe(新订户()

不是真的打电话,而是能给“用户”对象它应该返回,以便测试可以传递到onNext和onComplete

,所以只需将api替换为返回用户对象的模拟api,这里做了什么样的测试?您正在测试演示者,而不关心真正的网络获取逻辑吗?我使用MockWebServer返回用户对象,但它一直在o中登录由于某些原因出错。请更正仅测试演示者的错误(我希望确保在返回对象为正确用户时调用singUpSuccessful(201代码),在返回json为错误时调用onError(400)您得到的错误是什么?您可以添加错误的堆栈跟踪吗?在调用
API.signUpUser(凭据)时,您的改型API是连接到模拟服务器还是连接到真实服务器
现在在您的UI测试中?正如@yosriz所说,只需使用Mockito来存根您想要的api行为,并使用此mock进行方法调用验证。@不,不要这样做,因为这不会测试服务连接错误、服务器状态码(即返回500或404)等等。使用
MockWebServer
,但您必须确保api连接到MockWebServer(更改基本url以指向您的mock服务器)。