Дразнить источник в потоках Акка - PullRequest
0 голосов
/ 30 марта 2020

У меня есть класс-оболочка AwsS3Bucket, который при вызове возвращает источник Source[ByteString, NotUsed]. В моем модульном тесте я издевался над этим клиентом и делал необходимые утверждения.

val source = Source.fromIterator(() => List(ByteString("some string")).toIterator)
when(awsS3Bucket.getSource(any[String])).thenReturn(source)

Однако теперь я хочу протестировать сценарий ошибки, в котором я хочу, чтобы метод getSource вызвал исключение. Я попробовал следующий код,

val error = new RuntimeException("error in source")
when(awsS3Bucket.getSource(any[String])).thenReturn(error)

, но у меня возникает проблема компиляции, говорящая, что

Cannot resolve overloaded method thenReturn

Может кто-нибудь, пожалуйста, сообщите мне правильный метод возврата исключения в Source в Акка потоки.

1 Ответ

0 голосов
/ 30 марта 2020

Вы должны использовать thenThrow(new RuntimeException("error in source")), чтобы заглушить Exception.

Тем не менее, иногда вы можете встретить проблемы с проверенными исключениями, так как Scala обрабатывает все исключения как время выполнения, поэтому они не объявляются в подписи, и стандартный Mockito проверит, что вы заглушаете исключение, которое может быть выдано заглушенным методом.

В mockito- scala эта проверка была удалена для подтверждения того факта, что все исключения ведут себя как время выполнения в Scala

...