Код вызываемого модульного теста подавляет Debug.WriteLine и Trace.WriteLine - PullRequest
3 голосов
/ 10 марта 2012

У меня есть код, который мне нужно увидеть, когда я запускаю тест, и TestContext должен быть частью моего класса Test мне нужно Отображается debug.writelines тестируемого класса. я считал просто передать TestContext в мой статический метод MessageStatus и может должен, но это будет PITA, потому что класс UnitTest будет иметь передать TestContext объекту, который он тестирует. Слишком плотно в сочетании на мой вкус.

В основных терминах

 [TestMethod]
       public void TestA()
       {
           //....
           Assert.IsTrue(Blah.Blah()));
       }



public void Blah()
{
    Debug.WriteLine("Hello");
}

никогда не появляется при запуске модульных тестов!

Я мог бы изменить его на:

TestContext t;
 [TestMethod]
       public void TestA()
       {
           //....
           Assert.IsTrue(Blah.Blah(t)));
       }



public void Blah(TestContext p1)
{
    p1.WriteLine("Hello");
}

но это безумие, это означает изменение всех моих подписей и тесную связь. Я читаю ветку на Как записать вывод из модульного теста? это не помогает: (

Ответы [ 2 ]

2 голосов
/ 10 марта 2012

Если вам нужно увидеть строки, созданные Debug.WriteLine или иметь дело с утверждениями, созданными Debug.Assert, вы можете создать свой собственный System.Diagnostic.TraceListener для перенаправления вывода в TestContext - см. Мой ответ Что мне нужно сделать сделать так, чтобы утверждения больше не блокировали автоматические тесты? .

public class MyListenerThatDoesNotShowDialogOnFail: 
       System.Diagnostics.TraceListener
{
    // This is to avoid message box on Debug.Assert(false);
    public override void Fail(string message, string detailMessage)
    {// do something UnitTest friendly here like Assert.Fail(false)
    }

    // This (+Write) is to redirect Debug.WriteLine("Some trace text");
    public override void WriteLine(string message)
    {// do something UnitTest friendly here like TestContext.Write(message)
    }
}

Где-то в слушателе настройки теста. Обратите внимание, что приведенный ниже пример упрощен, вы, вероятно, захотите сохранить текущих слушателей и восстановить их в конце теста.

Debug.Listeners.Clear();
Debug.Listeners.Add(new MyListenerThatDoesNotShowDialogOnFail());
1 голос
/ 10 марта 2012

Вам нужно использовать Console.WriteLine, чтобы вывод отображался в тестовом средстве. Однако это плохая вещь . Я рекомендую использовать каркас ведения журналов, например, nlog.

...