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.