2017-12-14 7 views
0

このテストでは、これらの2つの文字列のリストは同じですが、assertValueメソッドはメモリアドレスが異なるため、assertValueメソッドが等しいとは言えません。配列内の実際の文字列に対して、どうすればテストできますか?次のようになります。RxJava TestObserverを使用して2つの文字列リストをアサートする方法は?

@Test 
public void shouldReturnStringList() {; 
    String[] strings = {"Hello", "World"}; 
    String[] strings2 = {"Hello", "World"}; 
    Observable<String[]> stringsObservable = Observable.just(strings); 

    TestObserver<String[]> testObserver = new TestObserver<>(); 
    stringsObservable.subscribe(testObserver); 

    testObserver.assertValue(strings2); 
} 

失敗したテストメッセージ:

java.lang.AssertionError: Expected: [Ljava.lang.String;@5ebec15 (class: String[]), Actual: [Ljava.lang.String;@21bcffb5 (class: String[]) (latch = 0, values = 1, errors = 0, completions = 1)

答えて

2

assertValueは、その比較のための基本的なObject.equalsを使用しているので、彼らはただのアドレスではなく、値を比較するので、それは配列のために失敗します。

あなたはオペレータのassertValue(Predicate<T>)バージョンを使用して、実際の比較を行うにArrays.equals(Object[],Object[])を使用する必要があります。

testObserver.assertValue(arr -> Arrays.equals(arr, strings2)) 
関連する問題