Test delle proprietà mappate, servizio interno

0

Considera questo semplice metodo.

    public async Task AddItem(TodoItem item) {
        if(item.DueAt < DateTime.Today) {
            item.ValidationMessages.Add( "The date is missing!" );
            return;
        }

        var mappedVersion = _mapper.Map<TodoItemDto>( item );

        await _todoRepository.Insert( mappedVersion );
    }

Come potrei verificare se le proprietà mappate (su mappedVersion) agiscono come presumo dovrebbero? Non riesco a trovare una buona soluzione per questo.

Questo è uno scenario molto comune per essere equi.

    
posta frostings 05.09.2017 - 12:28
fonte

2 risposte

1

Con i repository hai un output extra da testare. Il database.

Generalmente non vale la pena provare a inserire un datalayer extra mockable tra il db e il repository. Invece hai un numero di opzioni.

1: aggiungi l'oggetto al repository e poi recuperalo dal repository. controlla l'articolo come previsto.

Questo è l'approccio più semplice. Stai testando il requisito fondamentale del repository. Che può immagazzinare oggetti. Non ti interessa come lo gestisce

2: Colpire direttamente il database nel test per verificare cosa è stato scritto.

Potresti avere requisiti aggiuntivi, come i dati devono essere in una particolare tabella, o essere crittografati, ecc. Puoi usare un client db standard per recuperare e controllare le righe del database scritte dopo aver aggiunto l'elemento al repository.

3: Estrai la logica di mappatura.

Se il repository ha una dipendenza su IObjectMapper che viene iniettato. quindi puoi testare la tua classe di mapper separatamente dal repository

    
risposta data 05.09.2017 - 13:52
fonte
1

How would I test whether the mapped properties (on mappedVersion) act as I assume they should ? I cannot come up with any good solution for this.

IMO, dovresti avere dei test unitari per la tua classe mapper. Questi test convalideranno tutti i possibili comportamenti di mappatura sulla tua app.

Inoltre, per il metodo che hai fornito come esempio, puoi estrarre il suo corpo in un altro metodo (non asincrono), che userebbe il _todoRepository e _mapper come al solito, ma poi potresti creare dei test unitari, simulare il repository e convalidare il riposo. Ad esempio, è possibile fornire un finto simulato per il repository e nel test dell'unità si controlla il contenuto di questo oggetto fittizio repo per verificare se le sue informazioni sono valide.

Questo approccio ti aiuta?

    
risposta data 05.09.2017 - 15:08
fonte

Leggi altre domande sui tag