Mam projekt testowy w programie Visual Studio. Używam Microsoft.VisualStudio.TestTools.UnitTesting.
Dodaję tę linię w jednym z moich testów jednostkowych:
Console.WriteLine("Some foo was very angry with boo");
Console.ReadLine();
Kiedy uruchamiam test, test kończy się pomyślnie, ale okno konsoli nie jest w ogóle otwierane.
Czy istnieje sposób udostępnienia okna konsoli do interakcji za pośrednictwem testu jednostkowego?
c#
.net
visual-studio
unit-testing
console-application
ołówekCake
źródło
źródło
Dump
metodę rozszerzenia, która wyprowadza zawartość obiektu do konsoli, co znacznie ułatwia debugowanie. i.imgur.com/MEZwy7X.pngOdpowiedzi:
UWAGA: Oryginalna odpowiedź poniżej powinna działać dla każdej wersji VS do VS2012. Wygląda na to, że VS2013 nie ma już okna wyników testu. Zamiast tego, jeśli potrzebujesz danych wyjściowych specyficznych dla testu, możesz użyć sugestii @ Stretch,
Trace.Write()
aby zapisać dane wyjściowe w oknie Output.Console.Write
Metoda nie pisać do „konsoli” - pisze na to, co jest podłączone do standardowego uchwytu wyjścia dla procesu. PodobnieConsole.Read
odczytuje dane wejściowe z tego, co jest podłączone do standardowego wejścia.Po uruchomieniu testu jednostkowego za pomocą VS2010 standardowe wyjście jest przekierowywane przez wiązkę testową i przechowywane jako część wyjścia testowego. Można to zobaczyć, klikając prawym przyciskiem myszy okno Wyniki testu i dodając kolumnę o nazwie „Wyjście (StdOut)” do ekranu. To pokaże wszystko, co zostało napisane na stdout.
Państwo mogłoby ręcznie otworzyć okno konsoli, przy użyciu P / Invoke jak @ sinni800 mówi. Z przeczytania
AllocConsole
dokumentacji wynika, że funkcja zresetuje sięstdin
istdout
obsługuje wskazanie nowego okna konsoli. (Nie jestem tego w 100% pewien; wydaje mi się, że trochę źle, jeśli przekierowałem jużstdout
system Windows, aby ukraść to ode mnie, ale nie próbowałem).Ogólnie jednak uważam, że to zły pomysł; jeśli wszystko, do czego chcesz użyć konsoli, to zrzucić więcej informacji o teście jednostkowym, dane wyjściowe są dla Ciebie. Nie przestawaj korzystać z
Console.WriteLine
tego, co robisz, a po zakończeniu sprawdź wyniki w oknie Wyniki testu.źródło
AllocConsole
dokumentację, może się mylę, ale musiałbym to przetestować.Ktoś skomentował tę pozornie nową funkcjonalność w VS2013. Na początku nie byłem pewien, co miał na myśli, ale teraz, kiedy już wiem, myślę, że zasługuje na własną odpowiedź.
Możemy normalnie korzystać z Console.WriteLine, a wynik jest wyświetlany, tylko nie w oknie Output, ale w nowym oknie po kliknięciu „Output” w szczegółach testu.
źródło
Możesz użyć tego wiersza, aby napisać do okna wyjściowego programu Visual Studio:
Musi działać w trybie debugowania.
źródło
Jak wspomniano, testy jednostkowe są zaprojektowane tak, aby działać bez interakcji.
Można jednak debugować testy jednostkowe, tak jak każdy inny kod. Najłatwiej jest użyć przycisku Debuguj na karcie Wyniki testu.
Możliwość debugowania oznacza możliwość korzystania z punktów przerwania. Możliwość korzystania z punktów przerwania oznacza zatem możliwość korzystania z punktów śledzenia , co jest niezwykle przydatne w codziennym debugowaniu.
Zasadniczo punkty śledzenia pozwalają pisać do okna Output (lub dokładniej, na standardowe wyjście). Opcjonalnie możesz kontynuować bieg lub zatrzymać się jak zwykły punkt przerwania. Zapewnia to „funkcjonalność”, o którą prosisz, bez konieczności przebudowywania kodu lub wypełniania go informacjami debugowania.
Po prostu dodaj punkt przerwania, a następnie kliknij go prawym przyciskiem myszy. Wybierz opcję „Po trafieniu…”:
Co powoduje wyświetlenie okna dialogowego:
Kilka uwag:
Więcej informacji można znaleźć w dokumentacji.
źródło
Istnieje kilka sposobów zapisywania danych wyjściowych z testu jednostkowego programu Visual Studio w języku C #:
Potwierdzone w Visual Studio 2013 Professional.
źródło
Możesz użyć
do zapisu w oknie danych wyjściowych podczas debugowania pliku unittest.
źródło
W programie Visual Studio 2017 „TestContext” nie wyświetla łącza danych wyjściowych w Eksploratorze testów. Jednak Trace.Writeline () pokazuje łącze Ouput.
źródło
Przede wszystkim testy jednostkowe mają z założenia działać całkowicie bez interakcji.
Pomijając to, nie sądzę, żeby była taka możliwość.
Możesz spróbować włamać się za pomocą AllocConsole P / Invoke, które otworzy konsolę nawet wtedy, gdy twoja bieżąca aplikacja jest aplikacją GUI.
Console
Klasa będzie następnie dodawać do teraz otwartej konsoli.źródło
Można również użyć Debug.WriteLine ().
źródło
Komunikaty wyjściowe IMHO są w większości przypadków istotne tylko w przypadku niepowodzenia testu. Przygotowałem poniższy format, możesz też stworzyć swój własny. Jest to wyświetlane w samym oknie VS Test Explorer.
Jak wyświetlić tę wiadomość w oknie VS Test Explorer? Przykładowy kod, taki jak ten, powinien działać.
Możesz mieć osobną klasę poświęconą temu dla siebie. Mam nadzieję, że to pomoże!
źródło
Mam łatwiejsze rozwiązanie (z którego ostatnio sam korzystałem, z wielu leniwych powodów). Dodaj tę metodę do klasy, w której pracujesz:
Następnie ... otwórz katalog AdHocConsole, uporządkuj według czasu utworzenia. Upewnij się, że dodając swoje „instrukcje drukowania”, są one różne, w przeciwnym razie będzie żonglerka.
źródło
Visual Studio dla komputerów Mac
Żadne z pozostałych rozwiązań nie działało w VS for Mac
Jeśli używasz NUnit , możesz dodać mały
.NET
projekt konsoli do swojego rozwiązania, a następnie odwołać się do projektu, który chcesz przetestować, w Odwołaniach tego nowego projektu konsoli .Cokolwiek robiłeś w swoich
[Test()]
metodach, możesz zrobić wMain
aplikacji konsolowej w następujący sposób:W tych okolicznościach możesz swobodnie używać
Console.Write
i używaćConsole.WriteLine
swojego kodu.źródło