Как получить стандартный вывод в mstest при запуске в новом домене приложения? - PullRequest
11 голосов
/ 08 марта 2010

Я работал над тестовой средой, которая создает новый домен приложения для запуска тестов. Основная причина, по которой библиотеки, которые мы тестируем, имеет какой-то ужасный код, который основан на том, что dll находится в пути к домену приложения.(Нет, я не могу изменить этот код.)

Проблема, с которой я сталкиваюсь, заключается в том, что моя группа по тестированию пишет несколько функциональных тестов в mstest и один из регистраторов, который пишет в Console.Out,не имеет никакой информации журнала, захваченной в выводе trx.При запуске кода через консольное приложение вся информация журнала выводится нормально.То же самое делают и другие реализованные регистраторы.

Я думаю, что mstest устанавливает свой собственный TextWriter на Console.Out, но у нового приложения есть собственный TextWriter для Console.Out, как и у нового домена приложения.это собственный набор статики.

Я ценю ваши идеи.

1 Ответ

10 голосов
/ 08 марта 2010

Я чувствую себя немного застенчиво, но как только я нажму "отправить" и снова подумал об этом, проблема вроде стала очевидной, и я нашел решение.

Проблема в том, что исходный Console.Out был установлен новым TextWriter с помощью mstest, и это не устанавливалось в моем новом домене приложения.

Итак, я создал метод SetConsoleOut для класса, который я создал в новом домене приложения, и передал его Console.Out.

TestFramework testFramework = 
          (TestFramework)newAppDomain.CreateInstanceAndUnwrap(
                                                "TestFrameworkLibrary",
                                                "MyNamespace.TestFramework");

testFramework.SetConsoleOut(Console.Out);

И в TestFramework я добавил метод

internal void SetConsoleOut(TextWriter consoleOut)
{
    Console.SetOut(consoleOut);
}

Работает как шарм. Я не уверен в этикете здесь. Должен ли я просто удалить вопрос или добавить свой ответ на вопрос?

...