Технический ответ: вы можете использовать библиотеку-насмешку, такую как PowerMockito, для создания смоделированных экземпляров класса Optional. И когда у вас есть фиктивный объект, вы можете указать ему, как реагировать на вызовы методов. Затем вам нужно «вставить» макетируемый необязательный объект в тестируемый класс.
Вы можете использовать это для покрытия первого оператора if: вы ожидаете, что макет увидит вызов isPresent()
и вернет true, и затем вернуть указанную c строку. Ваш тестовый сценарий может затем проверить, «вернулась ли ожидаемая строка». То же самое и в обратном случае, когда надруганный необязательный «пустой», вы гарантируете, что возвращается другая строка, и проверяете это.
Но, честно говоря, сомнительно, что вы должны сделать все это.
Вы должны сосредоточиться на публикации c контракт , который обеспечивает ваш метод.
И это будет означать:
- Включите себя, что вы можете передать (реальный) необязательный объект в тестируемый класс
- Когда ваш необязательный объект не пустой, ваш тест ожидает ... что вы положили в него
- Когда ваш необязательный пустой , ваш тест ожидает, что
extractText()
вернет
Конечно, здесь насмешка действительно проблематична c: необязательный класс final . Поэтому вам нужно либо использовать Mockito с «экспериментальной поддержкой окончательного включения», либо использовать PowerMock (ito) (который я настоятельно советую никогда не использовать).
Итак, как уже было сказано: избегайте насмешек.