我在我的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