2013-06-17 6 views
6

Abbiamo molti test in cui i dati del test sono archiviati in Excel. Ho creato dei testmethod in cui i fogli Excel sono collegati come DataSource allo TestContext.Scrittura dei risultati del test su TestContext con un foglio di lavoro Excel come origine dati

Per motivi di praticità, voglio aggiornare i fogli di Excel con il risultato dei test in modo che sia facile vedere dove i dati (o il sistema) sono errati.

cose che ho provato:

Scrivendo direttamente al TestContext.DataRow:

TestContext.DataRow.BeginEdit(); 
TestContext.DataRow["Result"] = "change"; 
TestContext.DataRow.EndEdit(); 
TestContext.DataRow.AcceptChanges(); 

Risultato: passa, ma nessuna riga vengono aggiornati nel mio file Excel.

Aggiornamento attraverso il DataConnection:

string currentRow = TestContext.DataRow["RowId"].ToString(); 
System.Data.Common.DbCommand cmd = TestContext.DataConnection.CreateCommand(); 
cmd.CommandText = String.Format("UPDATE {0} SET {1} = pass WHERE {2} = {3}", sheetName, columnName, "RowId", currentRow); 
cmd.CommandType = System.Data.CommandType.Text; 
cmd.ExecuteReader(); 

Risultato: System.Data.OleDb.OleDbException: Syntax error in UPDATE statement.

E aggiornandolo cambiando la DataRow sotto la TestContext:

string currentRow = TestContext.DataRow["RowId"].ToString(); 
OleDbDataAdapter adapter = new OleDbDataAdapter(); 
adapter.UpdateCommand = new OleDbCommand(String.Format("UPDATE {0} SET {1} = pass WHERE {2} = {3}", sheetName, columnName, "RowId", currentRow)); 
adapter.UpdateCommand.Connection = (OleDbConnection)TestContext.DataConnection; 
adapter.Update(new System.Data.DataRow[] { TestContext.DataRow }); 

Risultato: passa anche, ma nessuna riga sono aggiornati anche nel mio file Excel.

Qualcuno ha fatto questo prima con successo? O qualcuno ha un indizio in cui potrei sbagliarmi?

+1

Penso che dovresti considerare i tuoi dati di test come readonly. Non modificare il file. Invece, genera un utile output dal test includendo informazioni utili dalla riga che non hanno funzionato. –

+0

@PabloRomeo grazie per la tua considerazione ed è così che sto facendo adesso: invio tutte le intestazioni di colonna con le informazioni di riga alla Console e utilizzo l'attributo Description per inserire le informazioni sulla testcase in Gherkin, quindi il testcase è scritto a pieno quindi è ripetibile anche da una persona non tecnica. Tuttavia, sarebbe molto utile generare risultati in una colonna personalizzata nel file Excel e utilizzare la formattazione condizionale per visualizzare i dati non riusciti nel test, ma ho riscontrato maggiori difficoltà con questo approccio, come i criteri di verifica e il blocco dei file. – AutomatedChaos

+0

Perché non basta visualizzare lo stato non superato o superato da TestResults.trx usando VS? I test basati sui dati si espandono su più voci (una per ogni riga nell'origine dati) se non sbaglio. Inoltre, in passato ho utilizzato alcune trasformazioni XSLT pubblicamente disponibili per convertire il risultato TRX in un file html leggibile dall'uomo, ad esempio. –

risposta

0

MSTest non supporta la scrittura di nuovo nelle righe di dati per i test guidati dai dati e non è progettato per farlo.

Il mio suggerimento è di usare i metodi Trace.Write() ecc. Per stampare i risultati nei risultati per ogni singola iterazione del test, che è quello che faccio a scopo di debug nel caso di test falliti.