Возможно ли выполнять часть кода метода только при исполнении в тесте?

Собственно, вопрос в том, можно ли реализовать это без использования дополнительных параметров. Если конкретно, в этом коде:

public static bool CheckAndStep(
    ref int x,
    ref int y,
    Direction direction,
    ref VirtualPoint[,] map,
    Point start,
    bool isBack
)
{
    if (
        map[
            x + direction.X,
            y + direction.Y
        ].Flag < 3
        || (
            isBack
            && map[
                x + direction.X,
                y + direction.Y
            ].Flag != 3
        )
    )
    {
        if (start.X != x || start.Y != y)
        {
            if (map[x + direction.X, y + direction.Y].Flag == 4) map[x, y].Flag = 3;
            map[x + direction.X, y + direction.Y].Flag = 4;
        }
        if (!isBack) Logger.Write(
            x
            + ", "
            + y
            + " -> "
            + (x + direction.X)
            + ", "
            + (y + direction.Y)
        );
        else Logger.Write(
            + (x + direction.X)
            + ", "
            + (y + direction.Y)
            + " <- "
            + x
            + ", "
            + y
        );
        x += direction.X;
        y += direction.Y;
        return true;
    }
    else return false;
}

Мне нужно, чтобы Logger.Write() срабатывал только в тесте, но не при обычном выполнении программы.


Ответы (1 шт):

Автор решения: VladD

Нет, вам не должно такого хотеться.

Смысл юнит-теста как раз в том и состоит, что он тестирует ваш метод как он есть. Если вы тестируете одно, а в production исполняется другое, зачем тогда был весь тест?

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

Если вам нужно логирование (не только для отладки), тогда имеет смысл абстрагироваться от конкретного логгера, и логировать через интерфейс наподобие ILogger (а уж за поставку конкретной реализации может отвечать, например, dependency injection).

→ Ссылка