Подтвердить что ты не робот

Как получить stdout в mstest вывод при работе в новом домене приложения?

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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

testFramework.SetConsoleOut(Console.Out);

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

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

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