2013-06-17 6 views
6

Mamy wiele testów, w których dane testowe są przechowywane w programie Excel. Stworzyłem metody testowe, w których arkusze Excela są połączone jako DataSource z TestContext.Zapisywanie wyników testów w tekście testowym za pomocą arkusza roboczego programu Excel jako źródła danych

Ze względów praktycznych chcę zaktualizować arkusze Excela wynikami testów, aby łatwo było zobaczyć, gdzie dane (lub system) są błędne.

Czego próbowałem:

Pisząc go bezpośrednio do TestContext.DataRow:

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

Wynik: przechodzi, ale nie wiersze zostały zaktualizowane w moim pliku Excel.

Aktualizacja go przez 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(); 

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

i aktualizowanie go zmieniając DataRow pod 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 }); 

Wynik: przechodzi również, ale nie wiersze są również aktualizowane w moim pliku Excel.

Czy ktoś zrobił to przed pomyślnym zakończeniem? A może ktoś ma podpowiedź, w której mógłbym się mylić?

+1

Myślę, że powinieneś rozważyć swoje dane testowe jako przeczytane. Nie zmieniaj pliku. Zamiast tego wygeneruj użyteczne dane wyjściowe z testu, w tym przydatne informacje z wiersza, który się nie powiódł. –

+0

@PabloRomeo dziękuję za uwagę i tak to teraz robię: wyprowadzam wszystkie nagłówki kolumn z informacjami o wierszach do Konsoli i używam atrybutu Opis, aby wprowadzić informacje o testlirze w języku Korniszona, tak że zapis jest napisany w całości więc jest to ponowne wystawienie nawet przez osobę nie-techniczną. W takim przypadku byłoby dużo wygodniej wyprowadzać wyniki do niestandardowej kolumny w pliku Excel i używać formatowania warunkowego do wyświetlania danych, które nie powiodły się w teście. Napotkano na większe trudności z tym podejściem, takie jak zasady sprawdzania i blokowania plików. – AutomatedChaos

+0

Dlaczego po prostu wyświetlić status nieudanego lub przekazanego z TestResults.trx za pomocą VS? Testy oparte na danych rozszerzają się na wiele wpisów (po jednym dla każdego wiersza w źródle danych), jeśli się nie mylę. Ponadto, w przeszłości użyłem publicznie dostępnych transformacji XSLT do konwersji wyniku TRX na czytelny dla człowieka plik html, na przykład. –

Odpowiedz

0

Program MSTest nie obsługuje zapisywania z powrotem w wierszach danych dla testów opartych na danych i nie jest przeznaczony do tego celu.

Moja sugestia to stosowanie metod Trace.Write() itd. Do drukowania wyników w wynikach dla każdej iteracji testu, co robię dla celów debugowania w przypadku niepowodzenia testów.

Powiązane problemy