Ho appena iniziato a lavorare con Java 8. Vedo molti stream e opzionali. Una domanda mi è venuta in mente. Si consideri il seguente esempio tratto da this oracle tutorial:Report di copertura in Java 8
String name = computer.flatMap(Computer::getSoundcard)
.flatMap(Soundcard::getUSB)
.map(USB::getVersion)
.orElse("UNKNOWN");
O il prossimo tratto da here:
List<String> myList = new ArrayList();
myList
.stream()
.filter(s -> s.startsWith("c"))
.map(String::toUpperCase)
.sorted()
.forEach(System.out::println);
C'è qualche soluzione di copertura, che mi può dire se il orElse
nel primo frammento è stato utilizzato? O qualche altro, che mi dice che la chiusura filter
non è stata chiamata affatto, dal momento che la lista era vuota? È possibile segnalare che il metodo di riferimento in forEach
non è stato utilizzato?
L'utilizzo dei dati per il test aggiungere un optional senza alcun valore e controllare che appaiono sconosciute. – JEY
L'invocazione 'orElse' avverrà sempre e l'argomento viene sempre valutato prima che avvenga l'invocazione, quindi la sua copertura non richiede alcuna valutazione. Nel caso di espressioni lambda, vengono sottoposte a metodi sintetici durante la compilazione, quindi anche ogni copertura del codice aggiornata dovrebbe essere in grado di gestirle. – Holger
È garantito che qualsiasi operazione in una "pipeline" verrà colpita quando si utilizza un'operazione "terminale" sul flusso. Quindi non c'è davvero bisogno di copertura. – fge