Mockito - ложная зависимость без инъекций - PullRequest
0 голосов
/ 01 апреля 2020

Я просматриваю форумы весь день, пытаясь насмехаться над классом, но ни одно из решений не помогло мне, и я понятия не имею, что я делаю неправильно (я новичок в Java тестировании) .

У меня есть этот (переименованный) класс, который я хочу протестировать, в основном каждое условие, чтобы убедиться, что они работают:

public class MyClass {
    public static List<Object> MyClass(@NotNull Session session, @NotNull MyObject updated, @NotNull Mode mode)
    throws Exception {
        ModeList modes = MyUtil.geModes(mode);

        try {
            final Transaction tr = updated.getTransaction();
            MyObject original;

            if(tr == null) {
                original = new Foo().getCurrentBar(session, updated.getKey(), null, "en");
            } else {
                original = new Foo().getOtherBar(session,
                                                 updated.getKey(),
                                                 tr.getProp1().intValue(),
                                                 tr.getProp2().intValue(),
                                                 "en");
            }

            return SomeClass.check(updated, original, modes);
        } catch (Exception ex) {
            // handle
        }

        return null;
    }
}

Обратите внимание, что я не могу изменить это (или Foo class) / добавить внедрение зависимости, его нужно протестировать как есть. Я пробовал mockito, powerMock mock, mockStati c, частичные mock, et c, все они терпят неудачу по той или иной причине, и вызывается настоящий getCurrentBar / getOtherBar.

Возможно, я получаю туннель зрение на данный момент, но, пожалуйста, сообщите.

1 Ответ

0 голосов
/ 01 апреля 2020

Этот код неверен, он должен использовать фабрику, чтобы получить Foo, чтобы вы могли издеваться над фабрикой. Но так как вы не можете изменить его, то лучше всего использовать PowerMock.

Вы можете следовать этому руководству: https://github.com/powermock/powermock/wiki/MockConstructor убедитесь, что вы не забыли @RunWith и @ PrepareForTest аннотации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...