在此测试中,这两个字符串列表相同,但是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
(类别:String []),实际:[Ljava.lang.String; @ 21bcffb5(类别:
String [])(闩锁= 0,值= 1,错误= 0,补全= 1)

最佳答案

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

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

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

10-01 12:33