Как издеваться над приватным перечислением с помощью Powermock? - PullRequest
0 голосов
/ 28 января 2020

У меня есть следующий класс:

public class MyClazz
{

    private static enum MyEnum
    {
        INSTANCE;

        private MyClazzB getMyClazzB()
        {
            ....
            return
        }

        final MyClazzB b = getMyClazzB();
    }

    public void methodWhichIWantTest(arguments)
    {
        //...
        //here is logic which I want to test
        //...
        MyEnum.INSTANCE.b.doSomething();//I want to mock this line. 
    }
}

Я не автор MyClazz и не хочу ничего менять. Я только хочу проверить methodWhichIWantTest метод. Проблема в том, что метод getMyClazzB выдает исключение. Я не как издеваться над этим. Как издеваться над этим? Я думаю, что я должен издеваться над классом MyEnum, но он закрытый.

=== РЕДАКТИРОВАТЬ ===

Я думаю, что мне следует уточнить свой вопрос, потому что я получил некоторые комментарии. Я не являюсь автором MyClazz , но этот класс является частью моего проекта, и я могу редактировать этот класс, но я бы хотел избежать как можно большего редактирования. Я исправил некоторую ошибку в приватном методе MyClazz. Я хотел бы написать тест, который проверяет мое исправление. Тестирование закрытого метода не является хорошей практикой, поэтому я могу написать интеграционный тест или написать модульный тест для некоторого метода publi c, который вызывает этот закрытый метод. Сначала я хотел написать интеграционный тест, но после исследования я обнаружил, что интеграционный тест сложен и отнимает у меня слишком много времени. Поэтому я решил написать модульный тест для некоторого метода publi c, который вызывает этот закрытый метод. methodWhichIWantTest - это метод publi c. Метод getMyClazzB выдает исключение, потому что он создает javax.naming.InitialContext и ищет некоторые bean-компоненты (он работает правильно на wildfly, но не работает внутри простого модульного теста). Я думаю, что у меня есть следующие варианты:

  1. не проверять его
  2. написать интеграционный тест (это отнимает много времени)
  3. попробовать смоделировать MyEnum и написать модульный тест
  4. попробуйте смоделировать InitialContext и написать модульный тест
  5. отредактировать исходный код, макетировать и записать модульный тест.
  6. проверить приватный метод напрямую, используя java отражение

Мой вопрос связан с пунктом 3. Я не знаю, как реализовать пункт 3, мне было интересно, как это сделать, поэтому я задал мой вопрос. Я боюсь, что реализация пункта 3 невозможна в разумные сроки. Спасибо за помощь.

mockito-powermock "как-макетировать-enum-синглтон-класс-использование-mockito-powermock *" не решает мою проблему, поскольку перечисление MyEnum является частным. Например, я не могу использовать аннотацию @ PrepareForTest ({MyEnum.class}) * , поскольку MyEnum недоступен.

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