2015-02-15 5 views
7

Se si abbinano elenchi o mappe o altre strutture complesse, è utile vedere la differenza tra ciò che viene dato e ciò che è previsto. Per esempio:Come mostrare la differenza tra ciò che viene dato e previsto in ScalaTest?

Map("a" -> 1, "b" -> 2, "c" -> 3) should equal Map("a" -> 1, "b" -> 5, "c" -> 3) 

// ScalaTest output: 
[info] Map("a" -> 1, "b" -> 2, "c" -> 3) did not equal Map("a" -> 1, "b" -> 5, "c" -> 3) (Test.scala) 
[info] org.scalatest.exceptions.TestFailedException: 
[info] ... 

Si dovrà manualmente sguardo attraverso entrambe le mappe per trovare la differenza tra di loro, il più grande la vostra collezione diventa più difficile diventa.

Nel RSpec d'altra parte si otterrebbe:

expect({a: 1, b: 2, c: 3}).to match({a: 1, b: 5, c: 3}) 

// RSpec output: 
Failure/Error: it { expect({a: 1, b: 2, c: 3}).to match({a: 1, b: 5, c: 3})} 
    expected {:a=>1, :b=>2, :c=>3} to match {:a=>1, :b=>5, :c=>3} 
    Diff: 
    @@ -1,4 +1,4 @@ 
    :a => 1, 
    -:b => 5, 
    +:b => 2, 
    :c => 3, 

# ./spec/test_spec.rb:2:in `block (2 levels) in <top (required)>' 

E 'possibile avere qualcosa di simile con ScalaTest?

risposta

2

Non credo che ci sia qualcosa di esattamente come tu descrivi. Il più vicino che si può ottenere in ScalaTest è il diffing integrato per String.

Non è l'ideale, ma aggiungere toString alla fine delle mappe darà un risultato leggermente migliore. Analogamente, l'uso del metodo pretty su org.scalautils.PrettyMethods fa la stessa cosa.

Ad esempio:

Map("a" -> 1, "b" -> 2, "c" -> 3).toString shouldBe Map("a" -> 1, "b" -> 5, "c" -> 3).toString 

// scalatest output 
[info] "Map(a -> 1, b -> [2], c -> 3)" was not equal to "Map(a -> 1, b -> [5], c -> 3)" 
[info] org.scalatest.exceptions.TestFailedException: ... 

Questo scalatest-users email thread chiede una domanda simile al tuo, e ha le risposte di Bill Venners, l'autore di ScalaTest.

+0

Mi chiedo se ScalaTest 3.0 (ora in fase di snapshot) fornirebbe miglioramenti a questo. Un video qui -> https://skillsmatter.com/skillscasts/6021-scalatest-and-scalactic-3-0 – akauppi