如何使用 RxJava TestObserver 断言两个字符串列表?
How to assert two list of string using RxJava TestObserver?
在此测试中,这两个字符串列表相同,但 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: Expected: [Ljava.lang.String;@5ebec15
(class: String[]), Actual: [Ljava.lang.String;@21bcffb5 (class:
String[]) (latch = 0, values = 1, errors = 0, completions = 1)
由于 assertValue
使用基本的 Object.equals
进行比较,因此数组将失败,因为它们只比较地址,而不是值。
您需要使用运算符的 assertValue(Predicate<T>)
版本,然后使用 Arrays.equals(Object[],Object[])
进行实际比较:
testObserver.assertValue(arr -> Arrays.equals(arr, strings2))
在此测试中,这两个字符串列表相同,但 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: Expected: [Ljava.lang.String;@5ebec15 (class: String[]), Actual: [Ljava.lang.String;@21bcffb5 (class: String[]) (latch = 0, values = 1, errors = 0, completions = 1)
由于 assertValue
使用基本的 Object.equals
进行比较,因此数组将失败,因为它们只比较地址,而不是值。
您需要使用运算符的 assertValue(Predicate<T>)
版本,然后使用 Arrays.equals(Object[],Object[])
进行实际比较:
testObserver.assertValue(arr -> Arrays.equals(arr, strings2))