Filtrowanie listy obiektów po polu - test

Filtrowanie listy obiektów po polu - test
MA
  • Rejestracja:prawie 4 lata
  • Ostatnio:3 miesiące
  • Postów:30
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:ponad 6 lat
  • Ostatnio:10 dni
  • Lokalizacja:Silesia/Marki
  • Postów:5505
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));
  }
}

Mama called me disappointment, Papa called me fat
Każdego eksperta można zastąpić backendowcem który ma się douczyć po godzinach. Tak zostałem ekspertem AI, Neo4j i Nest.js . Przez mianowanie
Riddle
Administrator
  • Rejestracja:prawie 15 lat
  • Ostatnio:20 minut
  • Postów:10094
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.