我有两个java.util.Scanner
个对象。 Scanner
类实现Iterator<String>
。我想比较扫描仪,并且能够轻松查看不同的线条。
目前我以这种方式使用AssertJ软断言
@Rule
JUnitSoftAssertions softly = new JUnitSoftAssertions();
...
Scanner actual = ...
Scanner expected = ...
int i = 0;
while (actual.hasNext() && expected.hasNext()) {
softly.assertThat(actual.next()).as("line %s", i++).isEqualTo(expected.next());
}
这段代码并不完美,但AssertJ中是否有能力在一个断言中执行此操作?
我在IterableAssert<ELEMENT> assertThat(Iterator<? extends ELEMENT> actual)
类中看到了静态Assertions
方法,但在IterableAssert
中找不到合适的检查方法。
答案 0 :(得分:1)
文档说:
softly.assertThat(actual).containsExactlyElementsOf(expected);
因此,您可以创建一个返回扫描仪的自定义Iterable
public class ScannerIterable implements Iterable<String> {
private Scanner scanner;
public ScanerIterable(Scanner scanner) {
this.scanner = scanner;
}
@Override
public Iterator<String> iterator() {
return scanner;
}
}
这可以是通用的,因此可以采用任何类型的Iterator
。