Jesteś pierwszym, który prosi o taką funkcję. Jednym ze sposobów osiągnięcia tego jest withClue. Coś jak:
withClue("NumberOfElements: ") { NumberOfElements() should be (5) }
To powinno spowodować wyświetlenie tego komunikatu o błędzie:
NumberOfElements: 10 nie było równe 5
Jeśli chcesz całkowicie kontrolować wiadomość, możesz napisać niestandardowy element dopasowujący. Lub możesz użyć asercji, takiej jak ta:
assert(NumberOfElements() == 5, "NumberOfElements should be 5")
Czy możesz wyjaśnić, jaki jest Twój przypadek użycia? Dlaczego jest tak, że 10 nie równało się 5 nie pasuje do tabaki i jak często miałeś taką potrzebę?
Oto, o co prosisz:
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)
W ten sposób możesz napisać:
{ NumberOfElements() should be (5) } withMessage ("NumberOfElements:")
Nowy sposób od 2011 roku:
Matchers
iAppendedClue
cechy. Ponadto w przypadku rozmiarów kolekcji istnieją komunikaty domyślne.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 } } } }
Wynik wygląda następująco:
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)
Zwróć uwagę, że
List
komunikat o rozmiarze nie jest doskonały w przypadku list z długimi danymi.toString
wyjściowymi.Więcej informacji można znaleźć w scaladoc .
źródło
Możesz także użyć
withClue
bez importowania czegokolwiek lub dodawania tego do klasy testowej:withClue(s"Expecting distinct elements: ${elements.toList}") { elements.length shouldBe 3 }
To jest importowane z
Assertions
klasy:org.scalatest.Assertions#withClue
źródło