Могу ли я издеваться над статическим методом с помощью juni5 и mockito или easymock? - PullRequest
1 голос
/ 15 мая 2019

Мне нужно смоделировать статический метод с помощью junit5 (это очень важно) и mockito или easymock.Я видел, что powermock работает только с junit 4. Существует ли какая-либо форма для этого с junit5?

Ответы [ 2 ]

1 голос
/ 23 мая 2019

Пересмешивание статических методов невозможно без PowerMock.А когда вам нужен PowerMock, это означает, что код не разработан должным образом, в том смысле, что он тестируемый.Я работаю над проектом с Java 11, JUnit 5 и Mockito.PowerMock не поддерживает это вообще.И я сомневаюсь, что он когда-нибудь его поддержит.

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

Он имеет преимущества для изменения кода и использования инфраструктуры внедрения (например, Spring).Я знаю, что есть ситуации, которые ты не можешь просто сделать это.Если вы действительно не можете изменить реализацию, просто оставьте ее такой, какая она есть, и проведите множество модульных тестов, чтобы самостоятельно проверить статический метод со всеми видами параметров.Просто чтобы убедиться, что этот класс работает как положено.

0 голосов
/ 17 мая 2019

Не настолько, насколько я знаю.Самым простым будет защитить его нестатическим методом.

public class A {
    void foo() {
        Stuff s = MyClass.getStuff();
    }
}

станет

public class A {
    private final StuffProxy stuffProxy;
    public A(StuffProxy stuffProxy) {
        this.stuffProxy = stuffProxy;
    }
    public A() {
        this(new StuffProxy());
    }
    void foo() {
        Stuff s = stuffProxy.get();
    }
}

public class StuffProxy {
    public Stuff get() {
        return MyClass.getStuff();
    }
}

Тогда вы будете насмехаться StuffProxy.

...