2015-10-29 4 views
1

Почему не работает?Некоторые спецификации спецификаций2

Some(List()) must beSome(Nil) 

'Некоторые из них (List())' является Некоторыми List() не равно '' [email protected]

+0

Вы пробовали что-то вроде: Некоторого (List [TYPE]. empty) должен бытьSome (List [TYPE] .empty) т. е. явно использовать конструктор типа для списка заданного типа? –

+0

Я подтверждаю, что 'Some (List [Int]()) должен бытьSome (List [Int]())' работает нормально. – Eric

ответ

1

Обратите внимание, что

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))