Как я пишу в Окно вывода Visual Studio в Своем Инструменте пользователя?

Я являюсь все еще относительно новым в TDD - но способ, которым я преподавался/представлялся к различиям, состоял в том, чтобы думать о нем с точки зрения тестирования интеграции между классами и так, чтобы Вы не зависели от живых данных. Например, если у меня есть класс, который в значительной степени автономен - не зависящий от других классов, которые я создал для проекта, и это не выходит в живую data/dev среду для входа (как DB или API к системе) тогда, я только использовал бы классические модульные тесты в чем-то как NUnit или JUnit - но когда я начинаю тестировать взаимодействие между созданными классами - именно тогда это может вернуться к реальности удобное для насмешки других пользовательских классов и/или вне взаимодействия - так, чтобы можно было выбрать и протестировать код текущих классов, не пытаясь упорно искать потенциальную ошибку в других классах, которые Вы называете.

34
задан John Saunders 7 July 2009 в 19:38
поделиться

3 ответа

Окно вывода

Для записи в окно вывода «Общие» в Visual Studio вам необходимо сделать следующее:

IVsOutputWindow outWindow = Package.GetGlobalService( typeof( SVsOutputWindow ) ) as IVsOutputWindow;

Guid generalPaneGuid = VSConstants.GUID_OutWindowGeneralPane; // P.S. There's also the GUID_OutWindowDebugPane available.
IVsOutputWindowPane generalPane;
outWindow.GetPane( ref generalPaneGuid , out generalPane );

generalPane.OutputString( "Hello World!" );
generalPane.Activate(); // Brings this pane into view

Если, однако, вы хотите писать в настраиваемое окно , вот что вам нужно сделать:

IVsOutputWindow outWindow = Package.GetGlobalService( typeof( SVsOutputWindow ) ) as IVsOutputWindow;

// Use e.g. Tools -> Create GUID to make a stable, but unique GUID for your pane.
// Also, in a real project, this should probably be a static constant, and not a local variable
Guid customGuid = new Guid("0F44E2D1-F5FA-4d2d-AB30-22BE8ECD9789");
string customTitle = "Custom Window Title";
outWindow.CreatePane( ref customGuid, customTitle, 1, 1 );

IVsOutputWindowPane customPane;
outWindow.GetPane( ref customGuid, out customPane);

customPane.OutputString( "Hello, Custom World!" );
customPane.Activate(); // Brings this pane into view

Подробную информацию о IVsOutputWindow и IVsOutputWindowPane можно найти в MSDN.

Список ошибок

Для добавления элементов в список ошибок , IVsSingleFileGenerator имеет вызов метода void Generate (...) , который имеет параметр типа IVsGeneratorProgress . В этом интерфейсе есть метод void GeneratorError () , который позволяет сообщать об ошибках и предупреждениях в список ошибок Visual Studio.

public class MyCodeGenerator : IVsSingleFileGenerator
{
    ...
    public void Generate( string inputFilePath, string inputFileContents, string defaultNamespace, out IntPtr outputFileContents, out int output, IVsGeneratorProgress generateProgress )
    {
        ...
        generateProgress.GeneratorError( false, 0, "An error occured", 2, 4);
        ...
    }
    ...
}

Подробную информацию о GeneratorError () можно найти в MSDN.

58
ответ дан 27 November 2019 в 16:39
поделиться

Если вы хотите, чтобы что-нибудь отображалось в окне вывода, оно должно поступать из stdout. Для этого ваше приложение должно быть связано как «консольное» приложение. Установите / ПОДСИСТЕМУ: Флаг CONSOLE на странице свойств проекта в разделе Linker / System установите для свойства SubSystem значение CONSOLE.

После того, как ваш вывод появится в окне, если вы включите текст «Error:», он будет отображаться как ошибка, или если вы установите "Предупреждение:" оно будет отображаться как предупреждение. Если текст ошибки начинается с пути / имени файла, за которым следует номер строки в круглых скобках, среда IDE распознает это как «интерактивную» ошибку и автоматически перейдет к строке с ошибкой.

4
ответ дан 27 November 2019 в 16:39
поделиться

Вы можете использовать классы Debug и / или Trace. Здесь есть некоторая информация: http://msdn.microsoft.com/en-us/library/bs4c1wda (VS.71) .aspx

Желаем удачи.

0
ответ дан 27 November 2019 в 16:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: