Come testare l'associazione del modello all'interno di un controller MVC quando viene utilizzato l'attributo Bind con l'elenco Includi?

4

I metodi di azione generati automaticamente in MVC5 utilizzano BindAttribute con un elenco Includi che contiene i nomi dei campi in una stringa letterale.

Esempio:

// POST: MyTable/Edit/5
// To protect from overposting attacks, please enable the specific properties you want to bind to, 
//   for more details see http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit([Bind(Include = "Field1, Field2, Field3")] MyEntity myEntity)
{
    ... 
}

Se Field1 viene rinominato in MyEntity, non verrà automaticamente aggiornato nell'elenco Includi. Se lo sviluppatore si dimentica di aggiornare gli elenchi Include, il compilatore non si lamenterà e il problema potrebbe non essere scoperto fino al runtime.

Comprendo che è comune utilizzare classi di modello di visualizzazione e uno strumento come AutoMapper per mappare tra modello di visualizzazione e modello di dominio ed è quindi facile creare test unitari per tali mapping per rilevare gli errori di ridenominazione.

Tuttavia, se il metodo action utilizza direttamente il modello di dominio e utilizza un elenco di inclusione Bind come mostrato sopra, c'è un modo per creare un test unitario per testare l'associazione del modello e rilevare un errore di ridenominazione?

    
posta jk7 31.03.2015 - 20:27
fonte

1 risposta

2

Ho lavorato e continuo a lavorare su progetti API su larga scala e non ho mai usato BindAttribute. Direi che con questo codice lo rimuovi completamente, funzionerà ancora e rimuoverà le stringhe soggette a errori nell'attributo.

Personalmente e dalle mie esperienze non dovresti distribuire le tue entità di dati da un endpoint di API.

Utilizziamo i modelli di visualizzazione, ma li chiamiamo DataContract, come CarDataContract, HouseDataContract ecc. Quindi, come accennato, utilizziamo AutoMapper per mappare il modello di visualizzazione sul modello di dominio.

Da lì (se lo hai scritto bene) puoi testare i tuoi controller, i mapping e il dominio in uno splendido isolamento!

    
risposta data 31.03.2015 - 21:02
fonte

Leggi altre domande sui tag