Почему не работает?Некоторые спецификации спецификаций2
Some(List()) must beSome(Nil)
'Некоторые из них (List())' является Некоторыми List() не равно '' [email protected]
Почему не работает?Некоторые спецификации спецификаций2
Some(List()) must beSome(Nil)
'Некоторые из них (List())' является Некоторыми List() не равно '' [email protected]
Обратите внимание, что
Some(List()) must beSome(List())
тоже не работает.
'Some(List())' is Some but List() is not equal to
'[email protected]'
Actual: List()
Expected: [email protected]
Так что проблема не Nil
Мы знаем, что то, что мы действительно делаем это что-то вроде:
Some(List()).must(beSome(List()))
Проблема кажется с beSome
. Давайте посмотрим, что beSome
возвращается:
val bl = beSome(List()) // SomeCheckedMatcher[Int]
val bn = beSome(Nil) // SomeCheckedMatcher[Int]
Это не видно прямо, так как тип возвращаемого значения, как были проверяют один вариант для Integer:
val b = beSome(2) // SomeCheckedMatcher[Int]
И это не наши целевые типы:
val myList = List() // myList: List[Nothing] = List()
val myList2 = Nil // myList2: scala.collection.immutable.Nil.type = List()
Итак, что случилось?
Глядя на documentation (Option/Either), вы можете использовать beSome
на следующие способы:
beSome
проверить, если элементSome(_)
beSome(exp)
проверить, если элемент являетсяSome(exp)
beSome(matcher)
проверить, является ли элементгде удовлетворяет сличитель
beSome(function: A => AsResult[B])
проверить, если элемент являетсяSome(a)
гдеfunction(a)
возвращает успешныйResult
(обратите внимание, чтоSeq[A]
также функцияInt => A
поэтому, если вы хотите, чтобы проверить, что последовательность содержится в некоторых вами необходимо использовать Сличитель:beSome(===(Seq(1)))
последняя альтернатива, кажется, наша задача здесь. Обратите внимание: List()
похож на Seq
, функция от Int => A.В, наш пример:
val myList = List() // myList: List[Nothing] = List()
val func: Int => Nothing = myList // func: Int => Nothing = List()
Чтобы исправить это, мы должны использовать Искатель (третий альтернативные документации):
Some(List()) must beSome(beEqualTo(List()))
Some(List()) must beSome(beEqualTo(Nil))
// or
Some(List()) must beSome(be_==(List()))
Some(List()) must beSome(be_==(Nil))
Вы пробовали что-то вроде: Некоторого (List [TYPE]. empty) должен бытьSome (List [TYPE] .empty) т. е. явно использовать конструктор типа для списка заданного типа? –
Я подтверждаю, что 'Some (List [Int]()) должен бытьSome (List [Int]())' работает нормально. – Eric