Я являюсь все еще относительно новым в TDD - но способ, которым я преподавался/представлялся к различиям, состоял в том, чтобы думать о нем с точки зрения тестирования интеграции между классами и так, чтобы Вы не зависели от живых данных. Например, если у меня есть класс, который в значительной степени автономен - не зависящий от других классов, которые я создал для проекта, и это не выходит в живую data/dev среду для входа (как DB или API к системе) тогда, я только использовал бы классические модульные тесты в чем-то как NUnit или JUnit - но когда я начинаю тестировать взаимодействие между созданными классами - именно тогда это может вернуться к реальности удобное для насмешки других пользовательских классов и/или вне взаимодействия - так, чтобы можно было выбрать и протестировать код текущих классов, не пытаясь упорно искать потенциальную ошибку в других классах, которые Вы называете.
Для записи в окно вывода «Общие» в 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.
Если вы хотите, чтобы что-нибудь отображалось в окне вывода, оно должно поступать из stdout. Для этого ваше приложение должно быть связано как «консольное» приложение. Установите / ПОДСИСТЕМУ: Флаг CONSOLE на странице свойств проекта в разделе Linker / System установите для свойства SubSystem значение CONSOLE.
После того, как ваш вывод появится в окне, если вы включите текст «Error:», он будет отображаться как ошибка, или если вы установите "Предупреждение:" оно будет отображаться как предупреждение. Если текст ошибки начинается с пути / имени файла, за которым следует номер строки в круглых скобках, среда IDE распознает это как «интерактивную» ошибку и автоматически перейдет к строке с ошибкой.
Вы можете использовать классы Debug и / или Trace. Здесь есть некоторая информация: http://msdn.microsoft.com/en-us/library/bs4c1wda (VS.71) .aspx
Желаем удачи.