2013-07-15 17 views
5

Question (s)

  • Come faccio a testare la mia applicazione web ASP.NET MVC4 con EntityFramework 5?
  • Devo usare una struttura di simulazione come Moq?

Introduzione

Sono stato alla ricerca questo argomento per settimane. Ho trovato molto materiale ma nulla di ciò che sento risponde completamente alla domanda. Molte informazioni hanno anni e potrebbero non essere applicabili.Come si scrivono i test per la mia applicazione web?

La mia situazione

Sto costruendo un'applicazione MVC4 che è una ricostruzione di un'applicazione esistente, ma antiquato. Il database esiste già (e quindi l'approccio al primo database), è grande ed è complesso. Idealmente, quello che voglio è un falso oggetto "entità" identico al mio oggetto entità principale ma che utilizza un diverso database "mock" o in memoria di qualche tipo in modo da poter generare una serie di dati falsi, eseguire i test e ricevere un feedback Per esempio:

FakeEntities _db = new FakeEntities(); 
// test a controller action 

Finora ...

Da quello che ho capito finora dovrei usare integration testing. Secondo this post by Ladislav Mrnka integrazione mezzi di prova azioni di controllo di prova e significa meno problemi con se deridere il repository che si intende utilizzare LINQ to entità e LINQ-to-oggetti

LINQ to Objects e si avrà un verde test, ma se si esegue l'applicazione con LINQ to Entities si otterrà un'eccezione

so cosa vuol dire e io sono d'accordo - vorrei assicurare che sto utilizzando sempre LINQ to Entities e un database reale (o vicino al reale).

Ho letto molto su repository pattern e this blog by linush sembra essere molto vicino a quello che potrei provare. In effetti ho già creato un progetto fittizio in cui ho testato la creazione di un generic repository e l'Entity Framework utilizzato con successo e un DbContext "fittizio" basato su ObjectSet in memoria.

Il mio problema con questo approccio è

  1. Come sopra, questo significa che sto usando LINQ to Objects, invece di LINQ to Entities
  2. mio web app si baserà su un uso pesante di stored procedure

Sommario prima di rispondere

  • MVC4, EF5 e SQL Server (anche se mi piacerebbe restare somewh al database di agnostici)
  • possibilità di testare la logica che utilizzano SQL stored procedure
  • LINQ to Entities
  • Database-primo approccio
+4

Solo 50 rep per così tante domande !!!!!! Provare ad aumentare 0 di –

+0

[Compuware AJAX Edition Free Web Analisi delle prestazioni e strumento di debug] (http://www.compuware.com/en_us/application-performance-management/products/ajax-free-edition/Capabilities.html) –

risposta

1

la tua domanda è se stesso pieno di contraddizioni. Ad esempio, si dice che è importante testare le stored procedure, ma si vuole anche essere indipendenti dal database. Qual é?

Se si vuole veramente essere di database agnostico, sbarazzarsi di stored procedure e rendere il vostro ambiente di test molto più semplice. Sarai in grado di utilizzare un database completamente in memoria (come Apache Derby) come parte dell'ambiente di test. Ciò semplifica lo script all'interno di Jenkins o qualunque sia l'ambiente CI.

Successivamente è necessario decidere cosa si desidera testare. Se si eseguono i test unitari attorno ai controller, assicurarsi di scrivere i controller in modo che siano testabili. Dal momento che stai partendo da zero, questo dovrebbe essere facile da fare. Utilizza concetti come l'iniezione per semplificare lo scambio di parti della tua funzionalità per le implementazioni fittizie. Usa un framework di oggetti finti (come hai scoperto) per creare una serie di oggetti che passi al controllore in fase di test.

Tutto ciò è utile se è possibile testare i controller da soli. Ma se state costruendo uno stack altamente interdipendente con le stored procedure del database che interagiscono profondamente con i controller e le viste, allora non funzionerà bene. Ridisegnare il proprio approccio in modo che sia possibile testare l'unità o passare a test funzionali.

Selenium è uno dei più noti e utilizzati ambienti di test funzionali per le applicazioni web. È possibile testare l'intero sistema da un capo all'altro. Ancora meglio, è possibile iniziare a scrivere test di selenio attorno alla vecchia applicazione esistente e quindi assicurarsi che la nuova implementazione riproduca le stesse funzionalità durante la riscrittura.

Problemi correlati