2012-09-05 6 views
5

Dato che sono abbastanza nuovo nello sviluppo di applicazioni Web, attualmente sto avendo qualche difficoltà ad implementare alcune funzionalità di test.creazione di un testmode tramite il parametro url che inserisce valori in un modulo

Come parte del progetto Attualmente sto lavorando (An MVC 3 Web App per l'elaborazione dei pagamenti) mi è stato chiesto di creare un TestMode cui si può accedere tramite l'URL in questo modo:

http://websiteurl?testmode=1 

Il L'idea alla base di questo è che quando uno dei team di sviluppo aggiunge il parametro testmode all'URL, viene generata automaticamente una serie di valori del modulo per risparmiare tempo nell'inserimento dei dati ogni volta che l'applicazione viene testata.

Attualmente ho un'istruzione if nel controllore che utilizza Request.QueryString per impostare il parametro di sotto è il codice che sono attualmente in uso:

if (Request.QueryString.AllKey.Contains("tm")) 
{ 
    if (Request.QueryString["tm"] == 1) 
    { 
     insert values to be generated 
    } 
} 

Dato il contesto che cosa se qualsiasi sarebbe il metodo migliore di raggiungere questo?

Sarebbe possibile utilizzare un framework di simulazione come Moq o RhinoMocks per creare un repository fasullo anziché recuperare i risultati da un database o sarebbe meglio disporre di dati di test precaricati nel database?

risposta

2

Per iniziare vorrei incapsulare il controllo "TestMode".

I creerebbe un controller di base ed e aggiungere la seguente struttura:

// I would consider retrieving this from web.config 
protected string testModeKey = "tm"; 

public bool IsTestContext 
{ 
    get 
    { 
     return Request.QueryString[testModeKey] != null; 
    } 
} 

alternativa, non crei un metodo di estensione per HttpRequest:

public static bool IsTestContext(this HttpRequest request, string testModeKey = "tm") 
{ 
    request.QueryString[testModeKey] != null; 
} 

Questo è allontanato. Pensiamo a come possiamo inserire i valori. Qui sto facendo alcune supposizioni, ma sarei interessato a rendere testabile l'unità di controllo.

Suppongo che i dati vengano restituiti da alcuni IDataRepository e si dispone di due implementazioni del repository: FakeDataRepository e ReadDataRepository.

Si potrebbe quindi scrivere una factory o una semplice istruzione ifelse per decidere quale repository utilizzare.

IDataRepository DataRepository { get; set; } 

if (Request.IsTestContext) 
    DataRepository = new FakeDataRepository(); 
else 
    DataRepository = new RealDataRepository(); 

Questo funzionerebbe per quello che vuoi che faccia, ma non è un buon modo per andare avanti secondo me. Vorrei esaminare l'unità testando i controller. Puoi fornire maggiori dettagli su ciò che vorresti testare, dato che sto facendo alcune supposizioni e supposizioni qui?

0

Per avere alcuni dettagli su come l'applicazione è attualmente disposto ho fornito dettagli di seguito:

La struttura di base dell'applicazione seguire il modello di progetto di seta, abbattendo l'applicazione in Business Logic, dati Livello, Presentazione e Test unitari, il controllore che sto implementando questa modalità test in eredita già da un controller di base che attualmente contiene un'implementazione del modello Microsoft.Practices.ServiceLocation.

il servizio locator accede a quattro servizi trovati nel progetto Dominio business logico, tre di questi repository di accesso che contengono valori per tre elenchi a discesa il quarto accesso un'implementazione del servizio di transazione per la soluzione di pagamento (SagePay) che è stata integrato nell'app utilizza SagePayMvc.dll.

Tutti i repository ereditano da un repository di base Attualmente dispongo di sei repository che ereditano da questa base, tre di nuovo sono per la compilazione di elenchi a discesa le altre tre informazioni di archivio su Studenti, Titolari di carte e Dettagli ordini il metodo di test sta sostanzialmente accedendo il repository studenti che è attualmente in grado di compilare un modulo di dettagli dello studente al momento i dettagli del titolare della carta possono essere compilati utilizzando JQuery.

Ci sono due serie di modelli un set nella Business Logic e l'altro nel Livello dati, con la convalida del modello definita nel dominio della business logic.

Il modello di vista tramite il quale accedo ai modelli sta attualmente utilizzando il modello di dominio.

Per creare i repository sto utilizzando l'approccio Entity Framework Code First, attualmente crea i repository come database in cui le tabelle corrispondono a ciascuno dei modelli definiti.

Lo scopo di questa modalità test è compilare rapidamente i campi modulo non univoci (attualmente sono implementati alcuni elementi logici che impediscono agli studenti di immettere un nome già esistente) in modo che quando altri membri del team utilizzano l'applicazione possono valutare rapidamente se l'applicazione funziona, in particolare per il team di progettazione quando applicano lo stile all'applicazione.

Attualmente ho un setup di Test Class che sta testando l'asserzione che il Repository Studente può creare un nuovo studente i dati che ho definito qui accedono ad un repository fasullo definito usando Moq.

+0

dovrebbe anche notare che questa sarà una delle quattro modalità di test diverse, una compilerà il modulo con i valori per il pagamento negli Stati Uniti, uno salva i valori in un altro database e il quarto che ho già completato i reindirizzamenti alla pagina di successo – CryoFusion87

Problemi correlati