come progettare questo per renderlo testabile

0

Attualmente sto lavorando a un progetto in cui sto ricevendo un oggetto tramite il servizio web (WSDL).

Il processo generale è il seguente:

Ricevi oggetto - > aggiungi / elimina / aggiorna parti (o tutte) di esso - > e restituire l'oggetto con le modifiche apportate.

Il fatto è che a volte questi cambiamenti sono complicati e c'è qualche logica in gioco, altri database, altri servizi web, ecc. così per facilitare questo sto creando un oggetto personalizzato che riproduce quello originale ma ha alcune funzionalità avanzate per rendere le cose più facili.

Quindi sto provando ad avere questo processo:

Ricevi oggetto originale - > convertilo / copialo in oggetto personalizzato - > aggiungi / elimina / aggiorna - > converti / copialo nuovamente all'oggetto originale - > restituisce l'oggetto originale.

Esempio:

public class Row
{
    public List<Field> Fields { get; set; }
    public string RowId { get; set; }
    public Row()
    {
        this.Fields = new List<Field>();
    }
}

public class Field
{
    public string Number { get; set; }
    public string Value { get; set; }
}

Quindi, ad esempio, una delle "azioni" da eseguire su questo sarebbe trovare tutto Fields in un Row che corrisponda a Value uguale a qualcosa e aggiornarle con qualche altro valore.

Ho una classe CustomRow che rappresenta la classe Row , come posso rendere questa unità di classe controllabile? Devo creare un'interfaccia ICustomRow per deriderla nel test dell'unità? Se una delle azioni consiste nel sommare tutto il Values nel Fields che ha un Number uguale a 10 , come questa funzione, come può progettare la classe personalizzata per facilitare i test unitari.

Funzione di esempio:

public int Sum(FieldNumber number)
{
    return row.Fields.Where(x => x.FieldNumber.Equals(number)).Sum(x => x.FieldValue);
}

Mi sto avvicinando a questo nel modo sbagliato?

    
posta SOfanatic 23.10.2013 - 18:00
fonte

1 risposta

3

Sì, direi che ti stai avvicinando nel modo sbagliato. Perché deridere qualcosa?

Diamo un'occhiata alle tue unità:

receive object : testare la chiamata al servizio web non è il tuo obiettivo, usa un test di integrazione.

convert to custom object - è necessario l'oggetto originale e l'oggetto risultato per assicurarsi che questa operazione funzioni. Basta usarli.

stuff : la modifica dell'oggetto personalizzato utilizza solo l'oggetto personalizzato. Nessuna dipendenza da deridere qui. Crea un oggetto personalizzato, esegui la conversione, assicurati di finire nel nuovo stato.

(e le conversioni inverse usano gli stessi tratti)

Dato che non ci sono dipendenze non necessarie, non c'è niente da deridere.

    
risposta data 23.10.2013 - 18:51
fonte

Leggi altre domande sui tag