У меня есть следующий класс:
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, но не работает внутри простого модульного теста). Я думаю, что у меня есть следующие варианты:
- не проверять его
- написать интеграционный тест (это отнимает много времени)
- попробовать смоделировать MyEnum и написать модульный тест
- попробуйте смоделировать InitialContext и написать модульный тест
- отредактировать исходный код, макетировать и записать модульный тест.
- проверить приватный метод напрямую, используя java отражение
Мой вопрос связан с пунктом 3. Я не знаю, как реализовать пункт 3, мне было интересно, как это сделать, поэтому я задал мой вопрос. Я боюсь, что реализация пункта 3 невозможна в разумные сроки. Спасибо за помощь.
mockito-powermock "как-макетировать-enum-синглтон-класс-использование-mockito-powermock *" не решает мою проблему, поскольку перечисление MyEnum является частным. Например, я не могу использовать аннотацию @ PrepareForTest ({MyEnum.class}) * , поскольку MyEnum недоступен.