Filtrowanie listy obiektów po polu - test

Filtrowanie listy obiektów po polu - test
MA
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 31
0

Hej,
mam pytanie o test jednostkowy.
Chodzi ogólnie o testowanie metody która zwraca Predicate którego zadaniem jest przefiltrowanie w streamie obiektów po jakimś propertasie danego obiektu.
Patrząc na przykład z tego linka: https://www.baeldung.com/java-streams-distinct-by
i tej metody:

Kopiuj
public static <T> Predicate<T> distinctByKey(
    Function<? super T, ?> keyExtractor) {
  
    Map<Object, Boolean> seen = new ConcurrentHashMap<>(); 
    return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; 
}

zastanawiam się jak napisać test jednostkowy który będzie testował tylko ta metodę. Wiem, że można stworzyc kolekcje i zrobić filtra na streamie, ale czy jest jakiś inny sposób który by pozwolił stricte przetestować tą jedną metodę bez angażowania w to streama i filtra?

Pozdr

KamilAdam
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Silesia/Marki
  • Postów: 5550
0

No nie mam pojecia :P

Kopiuj
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;

public class WriteOnlyPL {
    
  public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
    Map<Object, Boolean> seen = new ConcurrentHashMap<>(); 
    return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null; 
  }
    
  public static void main(String args[]) {
    var p = distinctByKey(a -> a);
    System.out.println("WriteOnly.pl" + p.test(1) + ", " + p.test(2) + ", " + p.test(2) + ", " + p.test(3) + ", " + p.test(3) + ", " + p.test(3));
  }
}
Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
1

No Predicate<T> to obiekt javowy jak każdy inny. Możesz po prostu wywołać metodę test() na nim, i dostaniesz True lub False°

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.