Как получить вывод консоли в модульных тестах Visual Studio 2012

У меня есть управляемый модульный тест C ++ в VS 2012. Тест проходит нормально, и я могу убедиться, что выполняется цикл с несколькими вызовами cout.

Однако, когда я смотрю в обозреватель тестов, тест помечается как пройденный, но для вывода нет гиперссылки, как я привык для проектов C #.

Код в конце моего теста

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

который я могу проверить, когда я прохожу его в отладчике. Я тоже пробовал с cerr, но без разницы.


person bradgonesurfing    schedule 29.05.2013    source источник
comment
Если бы я использовал Console.WriteLine или Debug.WriteLine, в окне вывода по-прежнему ничего не было бы.   -  person n8CodeGuru    schedule 03.07.2013
comment
Можете ли вы вместо этого использовать Google Test, как описано [в этом вопросе] [1]? [1]: stackoverflow.com/questions/16531398/   -  person MichaelH    schedule 08.07.2013


Ответы (4)


Вы можете использовать Debug :: WriteLine () (в пространстве имен System :: Diagnostics) или Console :: WriteLine () для записи вывода в консоль Visual Studio 2012.

Код для теста (обратите внимание, что пространство имен System :: Diagnostics объявлено в другом месте). Тест

Просмотр результатов теста.

введите описание изображения здесь

После нажатия на ссылку «Вывод»:

введите описание изображения здесь

Он не использует std :: cout, но, надеюсь, это сделает то, что вам нужно.

person olen_garn    schedule 10.07.2013
comment
Есть ли возможность посмотреть это вживую? В NUnit это возможно. - person Babak; 13.01.2014
comment
@Babak - Я не знаю, как посмотреть такой результат вживую. Хороший вариант для просмотра вывода в реальном времени использует OutputDebugString () и описан в этом ответе: stackoverflow.com/a/1333542/542494 - person olen_garn; 05.02.2014
comment
СЛАВА БОГУ! Господи, ты не поверишь, как трудно найти этот ответ. Спасибо. - person Drew; 06.05.2016
comment
@olen_garn иногда вывод появляется, иногда нет, я не уверен, почему? любые предложения по исправлению, я использую vs enterprise rc. Я пробовал и консоль, и отладку Writeline. - person user2727195; 03.02.2017
comment
@ user2727195 - Поскольку он отображается периодически для вас, это заставляет меня задаться вопросом, есть ли в некоторых случаях Console :: WriteLine () или Debug :: WriteLine () на пути кода в вашем тесте, который не выполняется. Вы можете попытаться заменить строку журнала на Assert :: Fail (здесь я потерпел неудачу) или что-то подобное. Если тест не завершился с этим сообщением, значит, эта строка не выполняется. Приносим извинения, если это кажется слишком очевидным, но иногда проще сначала проверить очевидные и невозможные случаи. - person olen_garn; 03.02.2017
comment
@olen_garn Утверждения выполняются, иногда, когда это действительно необходимо, я вручную не выполняю утверждение, чтобы увидеть результат, например Assert.IsNotNull(null, result); объединение вывода с сообщением об ошибке, я также использовал запись файла, но это громоздко, поэтому дело в том, что оно выполняется, но выводится из Console или Debug не на 100% надежен в моей системе, есть ли какие-то настройки, которые я мог бы проверить, включить или выключить? - person user2727195; 04.02.2017

Мне кажется, что работает с использованием:

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

После запуска теста вы можете увидеть результат в окне Test Explorer, нажав output

person Hanan N.    schedule 15.09.2013
comment
Мне пришлось изменить вывод Show с: с General на Tests в окне вывода (Ctrl + W, O). - person Slate; 12.05.2014
comment
Похоже, что это единственный способ в нативных тестах. благодаря. - person ManicQin; 14.02.2016
comment
какая ссылка необходима, чтобы сделать регистратор доступным? - person Matthew James Briggs; 16.05.2016
comment
@MatthewJamesBriggs Это в C ++, а не в C #, поэтому я не думаю, что есть какие-либо ссылки. - person Hanan N.; 16.05.2016

Не знаю, могу ли я дать вам окончательный ответ, но, возможно, смогу дать ключ к разгадке.

В моем старом коде, который требовал вывода в окно консоли во время настраиваемого шага сборки, я использовал следующие строки:

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

Описание есть на странице http://msdn.microsoft.com/en-us/library/8hyw4sy7(v=vs.71).aspx для _CrtDbgReport.

Для меня это привело к тому, что вывод моего управляемого C ++ отобразился через окно вывода сборки. Надеюсь, это поможет вам с модульным тестированием.

person Prof Von Lemongargle    schedule 10.07.2013

Согласно Microsoft connect trx и результаты тестирования устарели

:(

http://connect.microsoft.com/VisualStudio/feedback/details/750184/test-results-window-does-not-show-test-results.

person n8CodeGuru    schedule 03.07.2013
comment
Хотя есть билет на соединение, в котором объявляется, что это не поддерживается, я все же вижу свою отладочную информацию в окне вывода. Не уверен, почему он работает с перебоями - person n8CodeGuru; 09.07.2013
comment
Хотя этот вопрос касался C ++. Я прямо задаю этот вопрос для C #. Ответ: иногда это не работает. Не знаю почему. Но это работает ... - person n8CodeGuru; 11.07.2013