Как проверить Either от Arrow в функциональном стиле - PullRequest
0 голосов
/ 13 февраля 2019

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

@Test
fun `test arithmetic`() {
    val simpleResult = 2 + 2
    Assertions.assertEquals(4, simpleResult)
}

А теперь я завернул результат:

@Test
fun `test arithmetic with either`() {
    val result : Either<Nothing, Int> = (2 + 2).right()
    Assertions.assertTrue(result.isRight())
    result.map { Assertions.assertEquals(4, it) }
}

Полагаю, это выглядит немного уродливо, потому что последние утверждения не будутвыполняется, если мы получили Either.Left вместо Either.Right Как правильно проверить результат в функциональном стиле?

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Реализации Either являются классами данных с обеих сторон, поэтому вы можете сделать что-то вроде:

check(result == 4.right())

Или можете использовать нечто подобное с любой другой библиотекой утверждений, которая использует equals, чтобы утверждать равенство.

0 голосов
/ 13 февраля 2019

kotlintest предоставляет модуль kotlintest-assertions-arrow, который можно использовать для проверки типов стрелок.

Он в основном предоставляет сопоставления для любого из типов данных и других.Взгляните на это .

@Test
fun `test arithmetic with either`() {
    val result : Either<Nothing, Int> = (2 + 2).right()
    result.shouldBeRight(4)
}
...