2014-02-21 2 views
0

Что мне нужно сделать, чтобы пройти в containTheSameElementsAs в качестве аргумента для параметра java.util.Listspecs2 containTheSameElementsAs не работает, если параметр java.util.List

Например:

class Foo() { 
    void javaList(List<Bar> bars) = ??? 
} 

Запуск specs2 SpecificationWithJunit теста со следующим кодом:

val foo = mock[Foo] 
... 
got { 
    one(foo).javaList(containTheSameElementsAs(SOME_LIST)) 
} 

Сейчас я получаю сообщение об ошибке:

найдено: org.specs2.matcher.Matcher [Traversable [бар]]

требуется: java.util.List [Бар]

ответ

1

Вы должны "адаптироваться" сличитель стать Matcher[java.util.List[Bar]], как это :

import scala.collection.JavaConversions._ 

class Foo { 
    def javaList(bars: java.util.List[Int]) = bars 
} 

val foo = mock[Foo] 

foo.javaList(java.util.Arrays.asList(1, 2)) 

got { 
    one(foo).javaList(containTheSameElementsAs(Seq(1, 2)) ^^ ((_: java.util.List[Int]).toList)) 
} 

((_: java.util.List[Int]).toList) часть преобразует сличитель аргумент, так что он имеет тип, ожидаемый согласовани.

+0

Что делать, если я хочу использовать be _ == (1) в качестве аргумента для параметра метода int? – netta

+0

Это должно сработать. – Eric

+0

он работал только после того, как я написал be _ === (1) – netta