Bisogna sbeffeggiare oggetti dati concreti?

4

Ho lavorato su un grande progetto in cui gran parte del codice non è sotto test. Sono stato in grado di aggiungere alcuni test unitari alle aree funzionali del codice e anche di avviare i servizi di simulazione, ma ho una domanda su quanto fare il mocking su altre aree.

Questa applicazione e gli endpoint sono primari basati su remoting .NET, quindi ci sono molti "oggetti dati" che vengono manipolati sul canale.

Nel testare alcune funzioni che gestiscono on l'oggetto non sono sicuro se dovrei prendere in giro l'oggetto dati o creare un'istanza.

Ecco un esempio:

[TestMethod()]
public void Test_GetAgeTest()
{
    //Arrange
    var familyMemberData = new FamilyMemberData
    {
        Demographics = { DoB = new DVDateTime(2000, 01, 01, 0, 0, 0) }
    };
    var year = DateTime.Today.Year;

    //Act
    var age = Translators.Test_GetAge(familyMemberData);

    //Assert
    Assert.AreEqual(year - 2000, age);
}

I traduttori è una classe statica e GetAge è una funzione che esegue alcuni calcoli su FamilyMemberData per ottenere l'età (Test_GetAge lo espone pubblicamente).

FamilyMemberData dovrebbe essere un oggetto Mock o un falso, o in casi come questi basta usarli così com'è?

    
posta Zach Leighton 24.11.2015 - 15:20
fonte

2 risposte

7

Ci sono diversi motivi per usare Mock / Fakes / Stubs (mettendoli tutti insieme, anche se sono davvero cose diverse):

  • Vuoi avere un maggiore controllo sulle risposte di una dipendenza, in modo da poter testare più facilmente situazioni difficili da ricreare con gli oggetti reali
  • Vuoi isolare i tuoi test da connessioni di rete lente, forse inaffidabili
  • Vuoi renderti più semplice con te stesso per assicurarti che le modifiche apportate da un test non persistano al di là del test
  • Vuoi isolare il code-under-test dalle dipendenze che potrebbero avere errori in loro stessi.

Se nessuno di questi motivi esiste per il codice che vuoi testare, dovresti semplicemente usare gli oggetti reali, in quanto è in genere molto più semplice che organizzare una simulazione, un falso o uno stub.

Nel tuo caso FamilyMemberData sembra essere solo un semplice contenitore di dati senza logica o dipendenze complesse che potrebbero innescare uno dei motivi per creare un mock, quindi non c'è valore in mocking FamilyMemberData .

    
risposta data 24.11.2015 - 15:49
fonte
2

Lo scopo generale di prendere in giro / falsificare ecc. è di bypassare le funzionalità di una classe per semplificare i test. Se per esempio FamilyMemberData contiene solo dati, allora non c'è nulla da guadagnare da deriderlo.

    
risposta data 24.11.2015 - 15:32
fonte

Leggi altre domande sui tag