2

я только модернизировал Specs2 на мой проект, и теперь некоторые функции не будут компилировать и не понятно, почему они не так, вот спецификации:Specs2 спецификации не удается скомпилировать после обновления до последней версии

"fail validation if a connection is disconnected" in { 

    val connection = factory.create 

    awaitFuture(connection.disconnect) 

    factory.validate(connection) match { 
    case Failure(e) => ok("Connection successfully rejected") 
    case Success(c) => failure("should not have come here") 
    } 

} 

(весь файл можно увидеть here)

И компилятор говорит:

не может найти неявное значение для параметра доказательства из типа org.specs2.execute.AsResult [Prod UCT с Сериализуемым] «сбоем проверки, если подключение отключено» в { ^

И хотя я понимаю, что он говорит, это не имеет никакого смысла дал я возвращаю ok или failure и я m охватывает все случаи моего матча.

Любая идея, что может быть неправильным здесь?

ответ

7

Компилятор пытается найти общий тип 2 ответвленных ветвей. В первой строке используется ok, которая является MatchResult, а во второй строке используется failure, которая возвращает Result. Их единственным распространенным типом является Product with Serializable.

Исправление просто использовать противоположное значение ok которое ko:

factory.validate(connection) match { 
    case Failure(e) => ok("Connection successfully rejected") 
    case Success(c) => ko("should not have come here") 
} 

Вы также можете написать

import org.specs2.execute._ 

... 

factory.validate(connection) match { 
    case Failure(e) => Success("Connection successfully rejected") 
    case Success(c) => failure("should not have come here") 
} 

Там нет, однако, не success(message: String) доступный метод в соответствии с соответствующей failure. Я добавлю его в следующую версию specs2 для лучшей симметрии.

Смежные вопросы