如何使用RxJava TestObserver断言两个字符串列表?

时间:2017-12-14 04:36:46

标签: java arrays unit-testing rx-java2

在这个测试中,这两个字符串列表是相同的,但assertValue方法告诉我它们不相等,因为它们有不同的内存地址。如何使其针对数组中的实际字符串进行测试,以便以下内容通过?

@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:预期:[Ljava.lang.String; @ 5ebec15   (class:String []),Actual:[Ljava.lang.String; @ 21bcffb5(class:   String [])(latch = 0,values = 1,errors = 0,completions = 1)

1 个答案:

答案 0 :(得分:7)

由于assertValue使用基本的Object.equals进行比较,因此数组会失败,因为它们只是比较地址,而不是值。

您需要使用运算符的assertValue(Predicate<T>)版本,然后使用Arrays.equals(Object[],Object[])进行实际比较:

testObserver.assertValue(arr -> Arrays.equals(arr, strings2))