我在我的android项目中使用RxJava,实际上我正在开始单元测试我的代码。如何测试复杂的RxJava Observables
我具有以下其中我要去测试
private Observable<Boolean> changeMyString (@NonNull String testString) {
return OneClass
.doSth1(testString)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.flatMap(testString2 -> Observable.create(
subscriber -> {
manager.setTestString2(testString2);
AnotherClass
.doSth2(testString2)
.subscribe(
testString3 -> {
manager.setTestString3(testString3);
subscriber.onNext(success);
},
subscriber::onError,
subscriber::onCompleted
);
}
));
OneClass.java doSth1(字符串的TestString)可观察方法
private Observable<Object> doSth1 (@NonNull String testString) {
return Observable.create(subscriber -> {
try {
testString = "CHANGEDSTRING"
subscriber.onNext(testString);
subscriber.onCompleted();
}
catch (Exception e) {
subscriber.onError(e);
}
});
}
AnotherClass.java doSth2(对象someObject)
public Observable<String> doSth2 (@NonNull Object someObject) {
return Observable.create(subscriber -> {
String changeText = preferences.getString(ANYSTRING, null); //preferences = SharedPrefences
if (StringHelper.isEmpty(changeText)) {
subscriber.onCompleted();
return;
}
try {
String finishedString = "WE ARE DONE! " + someObject.toString();
subscriber.onNext(finishedString);
subscriber.onCompleted();
}
catch (Exception e) {
subscriber.onError(e);
}
});
}
我的测试用例如下所示:
TestSubscriber<Boolean> testSubscriber = new TestSubscriber<>();
ClassToTest.changeMyString("TESTSTRING").subscribe(testSubscriber);
当我调试我的代码,它不是在这里达到这个部分:
...
.flatMap(testString2 -> Observable.create(
subscriber -> {
manager.setTestString2(testString2);
AnotherClass
.doSth2(testString2)
.subscribe(
testString3 -> {
manager.setTestString3(testString3);
subscriber.onNext(success);
},
subscriber::onError,
subscriber::onCompleted
);
}
));
我怎么能写出这种情况下的单元测试?我无法弄清楚,为什么它不工作...
感谢您的帮助家伙!
阿尔
对于这个解决方案,我必须改变很多我的整个项目。我正在使用带有静态方法的私有构造函数,该方法调用方法“changeMyString()” – NullPointer
因此,您的项目不是模块化的,并且不容易更改(例如,用于测试目的!)。 您仍然可以使用RxPlugins注入调度程序,但不推荐用于测试。 – dwursteisen
我编辑了我的问题。现在你可以看到我的其他方法调用正在做什么。否则,你可以帮助我吗? – NullPointer