I test di integrazione sembrano fare affidamento sulla costruzione di alberi di nodi specifici. Da ciò, suppongo che tu stia testando un pezzo di logica che crea l'albero dei nodi appropriato e lo restituisce.
Se è quello che stai facendo, allora è abbastanza ovvio che devi testare la struttura dell'albero del nodo. Quanto più complesse e varie sono le uscite possibili, tanto più devi affermare.
Ma non fa parte dell'approccio "nodo" il fatto che i nodi sono riutilizzabili pezzi di logica?
Ciò non significa quindi che un singolo test dovrebbe solo scavare in profondità uno livello, non più livelli? Stai raggruppando più test nello stesso metodo?
Potrebbe trattarsi di affari specifici. Forse ti stai aspettando alberi a più livelli. Forse questo può essere semplificato in una creazione (e test) livello per livello. È difficile rispondere senza conoscere il contesto specifico.
Se (e solo se) questo approccio multilivello è effettivamente garantito:
AssertNotNull("Node 1 is null", getNode1());
AssertNotNull("Node 8 is null", getNode1().getNode8());
AssertNotNull("Node 10 is null", getNode1().getNode8().getNode10());
AssertNotNull("Node 7 is null", getNode1().getNode8().getNode10().getNode7());
Ti interessano i nodi 1, 8 e 10? O stai semplicemente "passando attraverso i movimenti" per arrivare al nodo 7?
Se l'unica domanda significativa a cui stai rispondendo è "ho ricevuto un nodo 7?", quindi non ha senso affermare gli altri nodi. Se qualcuno di essi è nullo, ciò costringerà la domanda sul nodo 7 a rispondere con "no".
Non ha senso eseguire quattro diversi asserimenti per rispondere a una singola domanda binaria ("ho ricevuto un nodo 7?").
Aggiornamento dal commento pubblicato
Questa era una risposta di commento all'altra risposta.
Ho poca esperienza in Java (sono uno sviluppatore di C #), ma dalle esperienze passate è considerato accettabile provare / catturare una situazione del genere al fine di non verificarne i fatti in ogni fase.
In notazione C # eccessivamente semplificata:
public bool DoesNode7Exist(Node node1)
{
try
{
return n1.getNode8().getNode10().getNode7() != null;
}
catch
{
//catches every possible null in the hierarchy
return false;
}
}
Si noti che questo è strongmente semplificato per il gusto di esempio. Inoltre, poiché C # ora ha l'operatore ?.
, questo approccio è diventato obsoleto; ma non sono sicuro che Java abbia una soluzione simile disponibile al giorno d'oggi.
Aggiornamento dal tuo commento
This question is in fact use case independant, I dont think its useful to explain the whole business model behind these assertions, Question is simple enough, i wouldn't complicate it further.
Poiché il modello è presentato in questa domanda, il drill down nell'albero dei nodi sta violando la metodologia di test prevista. Ogni livello dell'albero deve essere testato individualmente, il che esclude intrinsecamente un problema in cui si esegue il drill-down di più di un singolo livello.
Il problema qui è che stai raggruppando diversi test in un singolo metodo di test; e quindi cercando di evitare di eseguire ogni test. Non funziona così. Devi testarlo tutto e deve essere testato in passaggi separati.
Inoltre, gli alberi basati su nodi si basano sulla logica riutilizzabile . Devi solo testare un singolo nodo (e la sua connessione ai suoi figli) per confermare che i nodi possono essere concatenati indefinitamente. Questo è un ulteriore motivo per cui non è necessario eseguire il drill down di due o più livelli, poiché tutto può essere verificato osservando una relazione figlio / genitore singolo.