2013-05-29 17 views
23

Mam zarządzany test jednostki C++ w VS 2012. Test działa dobrze i mogę sprawdzić, czy jest wykonywana pętla z wieloma wywołania cout.Jak uzyskać dane wyjściowe konsoli w testach jednostkowych programu Visual Studio 2012

Jednak gdy patrzę na test explorer test jest oznaczony jako przekazany , ale nie ma hiperłącza dla wyjścia, jak jestem przyzwyczajony do projektów C# .

Kod na końcu mojego testu jest

for (int i = 0; i < 4; i++) 
{ 
    cout << parameters[i]; 
    cout << endl; 
} 

które mogę zweryfikować działa jak krok po kroku to w debugera. Próbowałem również z cerr, ale bez różnicy.

+0

Gdybym miał użyć Console.WriteLine lub Debug.WriteLine nadal nic w oknie wyjściowym. – n8CodeGuru

+0

Czy możesz zamiast tego użyć testu Google, jak opisano [w tym pytaniu] [1]? [1]: http://stackoverflow.com/questions/16531398/how-can-i-add-a-unit-test-to-ac-console-program-in-visual-studio- 2012 – MichaelH

Odpowiedz

1
+0

Chociaż istnieje bilet connect, który deklaruje, że to nie jest obsługiwane, widzę informacje o moim debugowaniu w oknie wyjściowym. Nie wiem, dlaczego działa z przerwami. – n8CodeGuru

+0

Mimo że to pytanie dotyczyło C++. Jestem wyraźnie zadając to pytanie dla C#. Odpowiedź brzmi: czasami nie działa. Nie jestem pewien, dlaczego. Ale to działa ... – n8CodeGuru

19

Można używać Debug :: WriteLine() (w systemie :: Diagnostyka przestrzeni nazw) lub konsoli: : WriteLine() do zapisu danych wyjściowych do konsoli programu Visual Studio 2012.

Kod testu (należy zauważyć, że przestrzeń nazw System :: Diagnostics jest zadeklarowana w innym miejscu) The Test

Widok wyników testu.

enter image description here

Po kliknięciu na link "Wyjście":

enter image description here

To nie korzysta std :: cout, ale mam nadzieję, że to zrobi, co trzeba to zrobić.

+2

Czy jest jakiś sposób, aby obejrzeć go na żywo? Jest to możliwe w NUnit. – Babak

+1

@Babak - Nie jestem świadomy sposobu na oglądanie tego rodzaju produkcji na żywo. Dobra opcja do oglądania na żywo wykorzystuje OutputDebugString() i jest opisana w tej odpowiedzi: http://stackoverflow.com/a/1333542/542494 –

+0

DZIĘKUJEMYCH BOGU! Jezu, nie uwierzyłbyś, jak trudno jest znaleźć tę odpowiedź. Dziękuję Ci. – Drew

2

Nie wiem, czy mogę udzielić ci ostatecznej odpowiedzi, ale być może będę w stanie podać wskazówkę.

W moim starszym kodu potrzebnego, aby uzyskać wyjście do okna konsoli podczas etapu specjalnie skonstruowaną, użyłem następujące linie:

_CrtSetReportMode(_CRT_WARN, _CRTDBG_MODE_FILE); 
_CrtSetReportFile(_CRT_WARN, _CRTDBG_FILE_STDERR); 

jest opis na http://msdn.microsoft.com/en-us/library/8hyw4sy7(v=vs.71).aspx dla _CrtDbgReport.

Dla mnie to spowodowało, że wyjście z mojego zarządzanego C++ pojawiło się w oknie wyjściowym kompilacji. Mam nadzieję, że pomoże Ci w testowaniu jednostek.

16

Dla mnie wydaje się działać przy użyciu:

Logger::WriteMessage("What ever message");

Po uruchomieniu testu można zobaczyć wyjście w oknie Test Explorer klikając output

+0

Musiałem zmienić "Pokaż wyjście z:" z "Ogólne" na "Testy" w oknie Wyjście (Ctrl + W, O). – kjhf

+0

Wydaje się, że jest to jedyny sposób na "rodzimych" testach. dzięki. – ManicQin

+0

jakie odniesienie jest potrzebne, aby rejestrator był dostępny? –