Si vous implémentez des tests Java avec JUnit + Hamcrest, vous souhaiterez peut-être implémenter le deuxième argument de la méthode assertThat dans une expression lambda. Cependant, comme le type du deuxième argument de assertThat est org.hamcrest.Matcher, il ne correspond pas aux expressions lambda Java 8. (Parce que Hamcrest 2.1 est construit avec Java 7)
J'ai réfléchi à la façon d'implémenter la validation de valeur avec une expression lambda.
Le programme suivant est un test pour vérifier si la méthode à vérifier est égale ou inférieure à 0. Matcher quand il est plus petit que la valeur spécifiée est fourni par hamcrest, mais ici ce n'est qu'un échantillon ...
@Test
public void testSum() {
// Teste si la valeur est inférieure ou égale à 0
assertThat(new App().sum(10, -20), is(matches(i -> i <= 0, "negative value")));
}
Implémentez un Matcher personnalisé comme celui ci-dessous. Vous pouvez implémenter un code comme celui ci-dessus en important statiquement ce Matcher personnalisé.
import java.util.function.Predicate;
import org.hamcrest.Description;
import org.hamcrest.Matcher;
import org.hamcrest.TypeSafeMatcher;
public class LambdaMatcher<T> extends TypeSafeMatcher<T> {
private Predicate<T> predicate;
private String message;
public LambdaMatcher(Predicate<T> predicate, String message) {
this.predicate = predicate;
this.message = message;
}
@Override
public void describeTo(Description description) {
description.appendText(this.message);
}
@Override
protected boolean matchesSafely(T item) {
return this.predicate.test(item);
}
public static <T> Matcher<T> matches(Predicate<T> predicate, String message) {
return new LambdaMatcher<>(predicate, message);
}
}
En outre, bien que la méthode consiste à recevoir le message de l'appelant en tant que type String, elle peut également être utilisée comme la classe Assertions de JUnit5 en utilisant le type Supplier \ <String >.
J'espère que cela vous sera utile si vous souhaitez tester à l'aide d'expressions lambda dans Hamcrest.
--2018 / 12/31 Comme indiqué dans le commentaire, le code de la méthode de mise en œuvre a été corrigé. Merci beaucoup.
Recommended Posts