私のアンドロイドプロジェクトでRxJavaを使用しています。実際に私のコードをテストしています。複雑なRxJavaオブザーバブルをテストするには
私は
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()"を呼び出す静的メソッドを持つprivateコンストラクタを使用しています – NullPointer
あなたのプロジェクトはモジュール化されておらず、変更が容易ではありません。 RxPluginsを使用してスケジューラを注入することはできますが、テストすることはお勧めしません。 – dwursteisen
私の質問を編集しました。これで、私の他のメソッド呼び出しが何をしているかを見ることができます。そうでなければ私を助けることができますか? – NullPointer