s-h*_*ter 4 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);
}
Run Code Online (Sandbox Code Playgroud)
失败的测试消息:
java.lang.AssertionError:预期:[Ljava.lang.String; @ 5ebec15(class:String []),Actual:[Ljava.lang.String; @ 21bcffb5(class:String [])(latch = 0,values = 1,错误= 0,完成= 1)
由于assertValue使用basic Object.equals作为比较,它对于数组会失败,因为它们只是比较地址而不是值.
您将需要使用assertValue(Predicate<T>)运算符的版本,然后用于Arrays.equals(Object[],Object[])进行实际比较:
testObserver.assertValue(arr -> Arrays.equals(arr, strings2))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
724 次 |
| 最近记录: |