Отключить регистратор во время тестирования джунта? - PullRequest
5 голосов
/ 09 апреля 2011

Можно ли отключить выполнение регистратора во время тестирования?

У меня есть этот класс

public class UnitTestMe {

    private final MockMe mockMe;
    private final SomethingElse something;

    private final Logger logger = LoggerFactory.getLogger(this.getClass().getClass());

    public UnitTestMe(MockMe mockMe, SomethingElse something) {
        this..
    }

    public toTest() {
        logger.info("Executing toTest. MockMe a: {}, Foo: b: {}", mockMe.toString(), something.foo().bar());
        mockMe.execute();
    }
}

Мой модульный тест завершается с ошибкой NullPointerException, так как нечто.foo () не является поддельным объектом (я использую mockito с nicemock).

Как я могу протестировать этот класс, не удаляя оператор logger и не высмеивая несущественные части зависимостей, такие как something?

Редактировать: что-то в этом случае является объектом-клиентом, который не используется в функции toTest(), но необходим в других частях этого класса. Я использую класс Customer в инструкции logger, чтобы связать действие с пользователем.

Редактировать 2: Поможет ли это издеваться над объектом логгера? Я бы предположил, что я снова получу NullPointerException, потому что методы объекта "что-то" также выполняются.

Ответы [ 3 ]

3 голосов
/ 09 апреля 2011

Плохой ответ : сначала уменьшите уровень регистрации до WARN или ERROR для этого регистратора.Затем, окружите оператор записи с помощью isInfoEnabled():

if(logger.isInfoEnabled())
    logger.info("Executing toTest. MockMe a: {}, Foo: b: {}", mockMe.toString(), something.foo().bar());

Лучше : выглядит немного странно, что вы используете какой-то объект только для регистрации, поэтому, когдаПри тестировании метода toTest() макетная зависимость используется только для ведения журнала.Я понимаю, что это только пример, но похоже, что есть некоторый недостаток дизайна.Я бы посоветовал также издеваться SomethingElse ради простоты.

2 голосов
/ 09 апреля 2011

Ваше заявление о регистрации вводит дополнительное требование для насмешки something.Вы должны сделать так, чтобы оно давало ненулевое значение, возвращаемое для foo (), или переписать свои операторы регистрации, чтобы избежать введения этих дополнительных вещей.

0 голосов
/ 09 апреля 2011

Вы можете использовать try catch NullPointerException.

Если ваш тестовый метод хочет протестировать NullPointerException, будет лучше, если мы ожидаем NullPointerException

@expect(NullPointerException.class)
public void testMethod() {
//your test method logic
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...