Visual Studio Express 2013: выход программы в модульных тестах (консоль, отладка и т.д.)
Я действительно стучу головой о стену здесь. Неужели так сложно получить выпуск программы в Visual Studio (Express 2013)? При написании кода я считаю абсолютно необходимым иметь возможность распечатывать значения переменных, операций и т.д. Во время работы и устранения неполадок.
В Java и Eclipse всегда работает System.out.println(), который печатает на консоли IDE. При написании программ на C я всегда использую консоль, так что эхо ничего не проблема. Однако в VS Express 2013 я не могу получить какой-либо результат.
Может ли проблема быть связана с тем, что я пишу модульные тесты, а не "обычные" исполняемые программы? Если да, есть ли способ заставить VS показать вывод программы в классах unit test? Я пробовал использовать debug, но это ничего не показывает. Думаю, что есть проблема с конфигурацией, я искал решения для отладки сообщений, которые не отображаются, но ни один из параметров, которые я нашел (здесь или в других местах), похоже, не помогает.
Или, конечно, если есть другой широко используемый метод для проверки значений программы, вывода и т.д. при написании кода в VS/С#, я хотел бы услышать об этом: -)
У кого-нибудь есть идеи? И, пожалуйста, если вопрос слишком неясен или что-то еще, скажите мне, и я это исправлю.
NB: Я использую классы unit test для функционального тестирования, если кто-то хочет указать, что я должен и не должен делать с модульными тестами.
EDIT 1: Я забыл упомянуть, что я не могу запустить код с помощью "Start: Debug". Если я попытаюсь, я получаю эту ошибку: "Проект с типом выхода класса библиотеки не может быть запущен напрямую". (Проект unit test использует классы в другом проекте, который представляет собой проект библиотеки классов). Это, конечно, потому, что в решении нет исполняемого проекта. Я запускаю его, чтобы запустить выбранный тест из Test Explorer.
EDIT 2: Код:
using System;
using System.Diagnostics;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using WordpressAutomation;
namespace WordpressTests
{
[TestClass]
public class LoginTests : WordpressTest {
[TestMethod]
public void AdminUserCanLogIn() {
System.Diagnostics.Debug.WriteLine("Something...");
System.Diagnostics.Trace.WriteLine("Something...");
}
}
}
Ответы
Ответ 1
Мне не нравится отвечать на мой собственный вопрос, так как это кажется "нечестным". Тем не менее, на какое-то время было тихо, и я не думаю, что есть другие ответы.
Наиболее практичным решением является создание другого проекта, например консольного проекта, где вы создаете весь вывод. Он может не связываться напрямую с модульными тестами, но так как тестовая среда, которую я разрабатываю в этом конкретном примере, состоит из функциональных тестов, говорящих с библиотеками классов, возможно использование отдельного проекта в решении.
Итак, чтобы суммировать, решение состоит из:
- Проект unit test, с фактическими испытаниями
- Проект библиотеки классов с логикой структуры
- Консольный проект для тестирования классов в библиотеке классов или не unit test классов в проекте unit test.
Ответ 2
У TestExplorer Visual Studio есть отдельное окно вывода. Он не записывается в стандартный вывод Visual Studio (я не знаю, настраивается ли он)
Вам нужно выбрать Тест, который вы хотите увидеть в TestExplorer. Если Test имеет некоторый вывод, вы должны увидеть "Выход" гиперссылки. Нажав на эту кнопку, откроется новая вкладка, отображающая вывод теста.
![введите описание изображения здесь]()
Все отображаемые сообщения записываются Console.WriteLine
.
Я использую Visual Studio 2013 Professional. Я не уверен, что версия Express работает не так.
Ответ 3
System.Diagnostics.Debug.WriteLine("Yay!");
Если вы настраиваете окно вывода для отображения данных отладки, оно отображается там.
Источник: Visual Studio 2010 Express. Напишите в окно вывода (это для VS 2010, но оно также должно применяться к 2013 году, поскольку это опция рамки, а не опция IDE).
Ответ 4
Я считаю, что вы должны использовать журнал, а не консольный вывод для такой ситуации. Вы можете настроить журнал для вывода в файл или даже вывода в указанное вами окно. Я считаю, что вы можете использовать журнал для ситуации без консоли, и вы можете настроить ваш журнал, чтобы в процессе производства выводилось только предупреждение или ошибка, а отладочная информация может отображаться во время сеанса отладки.
Я использую log4j, здесь может быть использовано любое хорошее программное обеспечение журнала.
Ответ 5
Вы должны использовать систему ведения журнала, чтобы делать подобные вещи. В рамках ведения журнала вы можете выбрать доступ к консоли или к плоскому файлу или к множеству других приемников данных, или вы можете сообщить инфраструктуре игнорировать входные данные. Хорошие структуры ведения журнала чрезвычайно настраиваются.
В .NET-среде фаворитом сообщества является NLog, http://nlog-project.org/. Ссылка "Начало работы" поможет вам.
Ответ 6
Я не уверен в VS2013, но в VS2008, если вы дважды щелкните итоговую сводку результатов теста (после того, как она завершится, пропустите или не сработайте), он откроет окно с "Общими результатами", "Сообщение об ошибке" и т.д., в конце концов, "Стандартный вывод консоли". Это в основном делает хорошую работу по захвату вывода консоли для каждого теста индивидуально. Единственным недостатком является то, что он не отображает вывод в режиме реального времени. Он покажет его только по завершении.
Ответ 7
Невозможно запустить проект с типом выходного типа библиотеки классов непосредственно
Не запускается и не отлаживается проект unit test. Один инициирует тестовый сеанс путем выбора 1 или более тестов в окне Test Explorer
. Или по методу unit test, щелкнув правой кнопкой мыши и выбрав Run Tests
или Debug Tests
.
Используйте Console.WriteLine
или Debug.WriteLine
для вывода информационных сообщений по мере необходимости и найдите их в ссылке Output
в результатах unit test.