在这个测试中,这两个字符串列表是相同的,但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)
答案 0 :(得分:7)
由于assertValue
使用基本的Object.equals
进行比较,因此数组会失败,因为它们只是比较地址,而不是值。
您需要使用运算符的assertValue(Predicate<T>)
版本,然后使用Arrays.equals(Object[],Object[])
进行实际比较:
testObserver.assertValue(arr -> Arrays.equals(arr, strings2))