Các thử nghiệm sau thất bạiHai phương pháp tài liệu tham khảo chính xác không bằng nhau
@Test
public void test() {
Function<String, Integer> foo = Integer::parseInt;
Function<String, Integer> bar = Integer::parseInt;
assertThat(foo, equalTo(bar));
}
là có cách nào để làm cho nó vượt qua?
chỉnh sửa: Tôi sẽ cố gắng làm rõ hơn những gì tôi đang cố gắng làm.
phép nói rằng tôi có các lớp:
class A {
public int foo(Function<String, Integer> foo) {...}
}
class B {
private final A a; // c'tor injected
public int bar() {
return a.foo(Integer::parseInt);
}
}
bây giờ cho phép nói rằng tôi muốn viết bài kiểm tra đơn vị cho B:
@Test
public void test() {
A a = mock(A.class);
B b = new B(a);
b.bar();
verify(a).foo(Integer::parseInt);
}
vấn đề là những thử nghiệm thất bại, bởi vì các tài liệu tham khảo phương pháp là không công bằng.
"điều này ngăn cản tôi viết một bài kiểm tra đơn vị cho một phương thức lấy hàm làm đối số" <- phỏng đoán đầu tiên: kiểm tra không kiểm tra những gì cần. Điều gì sẽ xảy ra nếu bạn nói thêm một chút về bài kiểm tra được đề cập? – fge
Tôi sẽ giả định cách để kiểm tra rằng hai chức năng tương đương là để cho ăn công cụ vào chúng và kiểm tra cùng một điều đi ra ở phía bên kia. – biziclop
@biziclop nhưng bạn sẽ cần phải kiểm tra toàn bộ tên miền của các giá trị đầu vào, và đôi khi bạn không thể làm điều đó: p – fge