Как макетировать внутреннюю переменную с помощью компоновщика - PullRequest
1 голос
/ 25 апреля 2019

Я пишу юнит-тесты и столкнулся с проблемой со сборщиком: Вот класс для тестирования:

public class ToBeTest() {
    public void enact(SomeInput input){
        Session s = Session.builder().attributeA(input.getA()).build();
        s.attributeB("someValue");
    }
}

Как мне написать тест, чтобы убедиться, что Session S установил поле A, а также B успешно? Спасибо!

1 Ответ

2 голосов
/ 30 апреля 2019

В основном есть две вещи, которые вы можете проверить:

  • input.getA(): смоделируйте тот экземпляр SomeInput, который вы предоставляете тестируемому коду, затем вы можете проверить этот макетированный объект позже!
  • Session.builder(), скорее всего, является статическим вызовом, поэтому используйте static mocking для предоставления объекта-компоновщика, который вы можете проверить позже. См. Официальную документацию о необходимых шагах для этого.

Сказав это, ваша настоящая проблема заключается в том, что вы написали «сложный для тестирования код». Сюрприз, это затрудняет тестирование. Вы видите, какой смысл иметь переменную Sessions локального метода во-первых. Если этот метод вернет , что s, вы можете проверить, имеет ли он определенные свойства. Или, если s будет полем этого класса, вы можете выполнить другую проверку, чтобы убедиться, что правильно настроенный сеанс был собран.

Короче говоря: PowerMock (ito) предлагает то, что вам нужно для этого кода. Прочитайте несколько хороших руководств, и у вас не должно быть особых проблем. Но также стоит инвестировать в улучшение тестируемого кода, чтобы его было проще тестировать. Мое эмпирическое правило: когда вам нужен PowerMock (ito) для тестирования вашего кода, тогда ваш рабочий код должен быть улучшен.

...