Dovremmo testare i valori degli oggetti restituiti dai metodi testati dall'unità?

3

Essendo nuovo ai test delle unità, vorrei sapere se dovrei testare i valori degli oggetti restituiti dai metodi quando eseguo il test delle unità. Ad esempio, prendi in considerazione le seguenti classi:

public class Person
{
    public int Id { get; set }
    public int Age { get; set; }
    public string Name { get; set; }
    public Pet Pet { get; set; }
}

public class Pet
{
    public int Id { get; set; }
    public int Age { get; set; }
    public Breed Breed { get; set; }
}

E un metodo con la seguente dichiarazione:

public Person GetPerson(int id) { ... }

Ora sono curioso di sapere se dovrei creare un test che controlli se le varie proprietà della persona sono corrette (GetPerson_PersonFound_PersonHasCorrectName () e così via)? Sospetto che io, in circostanze normali, dovrei? Tutto dipende dai requisiti?

Se queste proprietà dovessero essere testate, dovrei quindi scavare nel Pet e controllare anche quelle proprietà? Che ne dici di andare ancora oltre, in Razza? È possibile aggiungere un bel po 'di test abbastanza rapidamente.

    
posta user1323245 25.07.2014 - 08:21
fonte

2 risposte

3

Naturalmente è necessario testare i valori di un oggetto restituito dal metodo testato, almeno quelli necessari per soddisfare il contratto di quel metodo. Che altro dovresti testare? La sua classe? Questo è già garantito dal sistema di tipi. (E se il tuo sistema di tipi non impone i tipi severi, tanto più è necessario verificare che esista una proprietà dell'oggetto restituito (1) e (2) abbia il valore previsto.

Se intendi se le proprietà in senso stretto, ovvero i metodi di accesso, dovrebbero essere testate, in linea di principio dovrebbero - ma se sono tutte banali o addirittura auto-generate, ovviamente il potenziale errore è piuttosto piccolo, quindi quelle sono non i test più importanti che dovresti scrivere.

    
risposta data 25.07.2014 - 10:39
fonte
1

Sarei d'accordo nel testare molto. In TDD è normale scrivere prima un test e poi implementare. Quindi se non scrivi un test che verifica se una persona ha un Age , allora non lo implementa. Flusso di lavoro TDD:

  1. Scrivi un test che non è in esecuzione (rosso).
  2. Implementa solo che questo Test e gli altri siano in esecuzione (Verde).
  3. refactoring.

Anche se devo dire che non testare le proprietà. Solo se contengono logica. Il motivo è che le proprietà non falliscono. Quello che puoi testare è l'input dell'utente, in modo che Age sia formattato correttamente e così via.

    
risposta data 25.07.2014 - 09:09
fonte

Leggi altre domande sui tag