2015-04-01 2 views
1

Я хочу утверждать равенство в ScalaTest классов case, содержащих Array. (Таким образом, встроенный в matchers равенства для случая классов не применяются.) Пример:Как получить осмысленные сообщения об ошибках для встраиваемых маркеров равенства в scala?

case class Example(array: Array[Double], variable: Integer) 

испытания заглушки:

val a = Example(Array(0.1, 0.2), 1) 
val b = Example(Array(0.1, 0.2), 1) 
a should equal (b) 

терпит неудачу, как и ожидалось. Поэтому я реализую знак равенства:

implicit val exampleEq = 
new Equality[Example] { 
    def areEqual(left: Example, right: Any): Boolean = 
    right match { 
     case other: Example => { 
     left.array should contain theSameElementsInOrderAs other.array 
     left.variable should be other.variable 
     true 
     } 
     case _ => false 
    } 
} 

Какой из них работает. Другой вариант состоит в том, чтобы реализовать свойство равенства в == во всех местах «должно быть», а в случае, если оно ложно в одном месте, возвращает false, иначе true. Проблема в том, что при запуске теста я получаю сообщение об ошибке, что оба объекта «Пример» не равны (если они нет), но я хотел бы видеть, в каком элементе они отличаются.

Как это достичь?

Благодарим за помощь!

[UPDATE] На практике Пример содержит несколько массивов и другие поля, поэтому я изменил код.

ответ

0

Рассмотренный с помощью:

left.array should contain theSameElementsInOrderAs other.array 

Ссылка: Working with "sequences".

+0

Спасибо за ваш ответ, я рассмотрел это, но отклонил, потому что у меня есть несколько полей (например, 10) в моем классе, и я не хочу писать 10 инструкций для каждой проверки. – DreamFlasher

+0

@DreamFlasher Возможно, я был неясно - не уверен. Я хотел предложить заменить «left.array.length должен быть (other.array.length) для (i <- 0 до left.array.length) { left.array (i) должен быть (other.array (i)) } 'с' left.array должен содержать theSameElementsInOrderAs other.array' –

+0

ах спасибо, теперь это имеет смысл, да, вы правы, я не должен сравнивать элементы самостоятельно, но используйте сравнение массива. Но я до сих пор не ошибаюсь? – DreamFlasher

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

  • Нет связанных вопросов^_^