Spero di poter fare una domanda chiara ... Ho semplificato il mio esempio di codice per questa domanda, spero che abbia ancora senso.
public class PersonComponent
{
public bool IsQualified(Person person)
{
if (person.PropertyA){ return true; }
if (person.PropertyB && !person.PropertyC) { return true; }
if (VeryDifficultFunction(person.Certificates))
{
return true;
}
return false;
}
private bool VeryDifficultFunction(List<Certificate> certificates)
{}
}
public class Person
{
public bool PropertyA { get; set; }
public bool PropertyB { get; set; }
public bool PropertyC { get; set; }
public List<Certificate> Certificates { get; set; }
}
public class Certificate
{ }
Ho un personcomponent che determina se un dato person è qualificato o meno.
Oltre ad alcune semplici convalide su proprietà A , B e C c'è un albero delle decisioni complicato nella lista di Certificates della Persona.
Ora quando implemento questa decisione complicata in PersonComponent creerei tutti i test unitari su PersonComponent (diciamo che il numero di test è 12).
Quindi, decido che questa conoscenza (l'albero delle decisioni complicato) sia troppa conoscenza per personcomponent , quindi la refactoring in una nuova classe, personCertificatescomponent .
Diciamo che questa classe ora assomiglia a questa:
public class PersonCertificatesComponent
{
public bool GetVeryDifficultFunctionResult(List<Certificate> certificates)
{}
}
Ora, cosa devo fare con i miei (12) test unitari per questo specifico codice?
DEVI MOVIMERli per operare su personCertificatescomponent ?
Pro:
Sembra una buona idea perché il personCertificatescomponent viene quindi testato separatamente (cosa che ritengo sia buona se qualcuno vuole riutilizzare questo componente), E (che è un grande vantaggio imo) Non devo impostare l'unità verifica il personcomponent ogni volta con i giusti valori per PropertyA/B/C , quindi raggiunge la parte VeryDifficultFunction .
Ho separato i test unitari per le 2 classi in modo da rendere il mio codice più "chiaro" (In qualche modo mi piacciono 2 classi con 8 test unitari meglio di 1 classe con 16 test unitari, ma forse è qualcosa che dovrei disimparare)
CONS:
Ma ora non ho più i test su personcomponent . Un'idea che è venuta fuori è stata testare l'unità se è stato utilizzato personCertificatescomponent (test di simulazione), ma poi sono legato al mio test unitario all'implementazione di personcomponent
O li COPIA, quindi personCertificatescomponent AND personcomponent sono entrambi testati unitamente? (che sembra bello, ma copiare i test non sembra SECCO)
O lascio i test dove sono? (pro e contro inverso di spostare i test di unità).
Non posso sopportare di non avere una buona risposta per me stesso .....