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?