Vous êtes le premier à demander une telle fonctionnalité. Une façon d'y parvenir est d'utiliser withClue. Quelque chose comme:
withClue("NumberOfElements: ") { NumberOfElements() should be (5) }
Cela devrait vous obtenir ce message d'erreur:
NumberOfElements: 10 n'était pas égal à 5
Si vous souhaitez contrôler complètement le message, vous pouvez écrire un matcher personnalisé. Ou vous pouvez utiliser une assertion, comme ceci:
assert(NumberOfElements() == 5, "NumberOfElements should be 5")
Pouvez-vous préciser quel est votre cas d'utilisation? Pourquoi 10 n'est pas égal à 5 n'est pas à la hauteur, et à quelle fréquence avez-vous eu ce besoin?
Voici le genre de chose que vous demandez:
scala> import org.scalatest.matchers.ShouldMatchers._
import org.scalatest.matchers.ShouldMatchers._
scala> withClue ("Hi:") { 1 + 1 should equal (3) }
org.scalatest.TestFailedException: Hi: 2 did not equal 3
at org.scalatest.matchers.Matchers$class.newTestFailedException(Matchers.scala:150)
at org.scalatest.matchers.ShouldMatchers$.newTestFailedException(ShouldMatchers.scala:2331)
scala> class AssertionHolder(f: => Any) {
| def withMessage(s: String) {
| withClue(s) { f }
| }
| }
defined class AssertionHolder
scala> implicit def convertAssertion(f: => Any) = new AssertionHolder(f)
convertAssertion: (f: => Any)AssertionHolder
scala> { 1 + 1 should equal (3) } withMessage ("Ho:")
org.scalatest.TestFailedException: Ho: 2 did not equal 3
at org.scalatest.matchers.Matchers$class.newTestFailedException(Matchers.scala:150)
at org.scalatest.matchers.ShouldMatchers$.newTestFailedException(ShouldMatchers.scala:2331)
Ainsi, vous pouvez écrire:
{ NumberOfElements() should be (5) } withMessage ("NumberOfElements:")
Nouvelle voie depuis 2011:
Matchers
etAppendedClue
traits. En outre, pour les tailles de collection, il existe des messages par défaut.import org.scalatest.{AppendedClues, Matchers, WordSpec} class SomeTest extends WordSpec with Matchers with AppendedClues { "Clues" should { "not be appended" when { "assertions pass" in { "hi" should equal ("hi") withClue "Greetings scala tester!" } } "be appended" when { "assertions fail" in { 1 + 1 should equal (3) withClue ", not even for large values of 1!" } } "not be needed" when { "looking at collection sizes" in { val list = List(1, 2, 3) list should have size 5 } } } }
La sortie ressemble à ceci:
SomeTest: Clues should not be appended - when assertions pass should be appended - when assertions fail *** FAILED *** 2 did not equal 3, not even for large values of 1! (SomeTest.scala:15) should not be needed - when looking at collection sizes *** FAILED *** List(1, 2, 3) had size 3 instead of expected size 5 (SomeTest.scala:21)
Notez que le
List
message de taille n'est pas idéal pour les listes avec une.toString
sortie longue .Voir le scaladoc pour plus d'informations.
la source
Vous pouvez également utiliser
withClue
sans rien importer ni l'ajouter à la classe de test:withClue(s"Expecting distinct elements: ${elements.toList}") { elements.length shouldBe 3 }
Ceci est importé de la
Assertions
classe:org.scalatest.Assertions#withClue
la source