Der folgende TestZwei genaue Methode Referenzen sind nicht gleich
@Test
public void test() {
Function<String, Integer> foo = Integer::parseInt;
Function<String, Integer> bar = Integer::parseInt;
assertThat(foo, equalTo(bar));
}
ist es eine Möglichkeit, es passieren zu machen scheitert?
bearbeiten: Ich werde versuchen, es klarer zu machen, was ich versuche zu tun.
Lets sagen, ich habe diese Klassen:
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);
}
}
kann jetzt sagen, dass ich Unit-Test für B schreiben will:
@Test
public void test() {
A a = mock(A.class);
B b = new B(a);
b.bar();
verify(a).foo(Integer::parseInt);
}
das Problem ist, dass der Test nicht bestanden, weil die Methode Referenzen nicht gleich.
"das hindert mich daran, einen Einheitentest für eine Methode zu schreiben, die eine Funktion als Argument nimmt" <- erster Tipp: Der Test testet nicht, was er sollte. Was, wenn Sie etwas mehr über den fraglichen Test erzählten? – fge
Ich würde annehmen, dass der Weg, um zu testen, dass zwei Funktionen äquivalent sind, darin besteht, Zeug in sie einzuziehen und zu überprüfen, dass das gleiche Ding auf der anderen Seite herauskommt. – biziclop
@biziclop aber Sie müssten die gesamte Domäne der Eingabewerte testen, und manchmal können Sie es einfach nicht tun: p – fge