Come posso testare con più combinazioni di input?

2

Ho un pezzo di codice che devo testare, che è stratificato in tre parti:

  • Controller API Web
  • Persistenza / livello logico
  • Il sistema richiede persistenza

È il sistema di chiamata GET / POST / PUT / DELETE di base. Ad esempio, nel controller ho il metodo GetAll che chiama in un Get nel secondo livello, che a sua volta chiama sia un metodo di database Sql sia un altro metodo web API.

Gli scenari: prendi in giro il secondo livello e chiama il controller. Mock le chiamate di sistema e chiama il secondo livello. Gestisci le chiamate di sistema e chiama il controller.

Per ogni scenario, ho più input di test, per ogni metodo nel controller / secondo livello.

Quale sarebbe il modo migliore per farlo? Voglio avere il minor numero possibile di duplicazione del codice.

Posso usare un attributo datasource sul mio test e avere per ogni test un valore di livello che selezionerebbe il tipo di mocking che dovrei fare, e per ogni valore di livello aggiungerei dati di test (parametri di input). Ma quei dati di test sarebbero comuni per tutti i valori di livello, il che significherebbe che dovrei duplicarlo per ogni valore di livello. Avrei anche gli stessi valori di livello per tutti i metodi nel livello controller / persistenza, che di nuovo sarebbe un duplicato.

Vorrei calcolare in qualche modo i valori del layer, che sarebbero comuni per tutti i test (pensate ai valori di livello di classe) e avere anche valori di input specifici per ciascun metodo nel controller (livello del metodo). E per ogni metodo, quindi, avrei un test in cui farei una sorta di prodotto incrociato tra i valori generali del layer e i valori di input del metodo specifico. Come potrei ottenere quello?

    
posta MciprianM 27.07.2015 - 15:01
fonte

1 risposta

1

Suggerirei di concentrarmi sui test comportamentali piuttosto che duplicare gli stessi test per diversi livelli. Voglio dire che testerei tutti gli strati tutti insieme in diversi scenari. Ad esempio:

  • Dato che non ci sono articoli, ottieni l'articolo X dovrebbe restituire Non trovato
  • Dato che esiste un elemento X, l'aggiunta dello stesso elemento dovrebbe restituire Conflitto

Quindi non è necessario testare gli stessi test con input diversi, perché ciò che in realtà non sono i valori ma i casi d'uso.

Per questi test suggerirei di usare un po 'di memoria nell'implementazione del database che consentirà di reimpostare il database per ogni test. Un buon strumento per questo scopo potrebbe essere Sforzo se si utilizza il collegamento di Entity Framework. Ci sono anche altri strumenti disponibili a seconda del tuo framework ORM o del Data Access Layer.

    
risposta data 06.10.2017 - 00:04
fonte

Leggi altre domande sui tag