Как распечатать информацию в тестовых проектах ядра .net? - PullRequest
0 голосов
/ 21 ноября 2018

Какой стандартный способ печати сообщений в тестовом проекте?

У меня есть тестовый проект Integration, написанный на MSTest, и каждый тестовый пример содержит шаг входа в систему, фактический вызов и т. Д. Мне нужно напечатать некоторые сообщения дляконсоль для отслеживания информации, например, какую роль она выполняет, и какова ее URL-адрес.

В идеале я хочу, чтобы сообщения отображались только в режиме отладки.

В настоящее время я использую Console.WriteLine с #if DEBUG директива.Есть ли лучший способ сделать это?

1 Ответ

0 голосов
/ 21 ноября 2018

Вам не нужно ничего регистрировать в своих юнит-тестах.Предполагается, что код в тестах говорит сам за себя, и любой, кто их читает, может понять, что происходит.Если вы чувствуете необходимость добавить протоколирование в свои тесты, то это признак того, что ваш код слишком сложен и нуждается в рефакторинге.

Это хорошая идея, чтобы понять принципы, лежащие в основе Принципы SOLID и рефакторинг вашего кода, чтобы следовать этим "правилам".Я бы порекомендовал первый принцип, которому вы пытаетесь следовать, это Принцип единой ответственности .Это должно помочь вам реорганизовать ваш код, чтобы сделать его более тестируемым, и избавить вас от необходимости добавлять протоколирование в ваши тесты.(ПРИМЕЧАНИЕ: в Интернете есть и другие примеры - ссылки, приведенные выше, являются лишь примерами, которые я нашел при быстром поиске).

РЕДАКТИРОВАТЬ

Вы можете создать свой собственный logger класс, чтобы обернуть ваши Console.WriteLine(...) вызовы, например,

public static class TestLogger
{
    public static void Log(string output)
    {
#if DEBUG
        Console.WriteLine(output);
#endif
    }
}

и в вашем тестовом коде использовать ваш класс

public class MyTests
{
    public void FirstTest()
    {
        TestLogger.Log("Just started");
    }
}

Тот факт, что регистратор пишет только на консоли в режиме отладкискрыт от тестового кода и, надо надеяться, сделает его немного понятнее.В будущем, если вы хотите использовать Log4Net или другую библиотеку журналов, вы можете обновить свой класс TestLogger, и, надеюсь, ни один из ваших тестовых примеров не нуждается в изменении: -)

...