Ich habe diese bequeme Methode in meinen Tests:Wie kann ich Test-Utility-Methoden ignorieren, wenn scalatest Fehler erkennt?
def assertFormat[T: SexpFormat](start: T, expect: Sexp): Unit = {
val sexp = start.toSexp
assert(sexp === expect, s"${sexp.compactPrint} was not ${expect.compactPrint}")
expect.convertTo[T] should be(start)
}
, die für den Betrieb einer Behauptung Muster im Grunde eine Bequemlichkeit ist, dass ich viel zu tun.
Es ist nicht möglich, dies als Matcher
neu zu schreiben wegen der impliziten Anforderung an SexpFormat[T]
(obwohl ich beim Hören von Möglichkeiten interessiert sein würde, dies zu tun, die mich nicht benötigen den Typen MyFormat
in foo should roundTrip[MyFormat](...)
zu schreiben)
Wenn innerhalb dieser Utility-Methode Tests fehlschlagen, markiert scalatest die Interna von assertFormat
als Ursache für den Testfehler. Aber ich möchte scalatest, um die Aufrufer dieser Methode zu erkennen, um die Ursache des Tests zu sein. Wie kann ich das machen?
d.h. Stromausgang
[info] - should support custom missing value rules *** FAILED ***
[info] SexpNil did not equal SexpCons(SexpSymbol(:duck),SexpCons(SexpNil,SexpNil)) nil was not (:duck nil) (FormatSpec.scala:11)
[info] org.scalatest.exceptions.TestFailedException:
[info] at org.scalatest.Assertions$class.newAssertionFailedException(Assertions.scala:529)
[info] at org.scalatest.FlatSpec.newAssertionFailedException(FlatSpec.scala:1691)
[info] at org.scalatest.Assertions$AssertionsHelper.macroAssert(Assertions.scala:502)
[info] at org.ensime.sexp.formats.FormatSpec$class.assertFormat(FormatSpec.scala:11)
[info] at org.ensime.sexp.formats.test.FamilyFormatsSpec.assertFormat(FamilyFormatsSpec.scala:151)
[info] at org.ensime.sexp.formats.test.FamilyFormatsSpec.roundtrip(FamilyFormatsSpec.scala:156)
[info] at org.ensime.sexp.formats.test.FamilyFormatsSpec$$anonfun$12.apply(FamilyFormatsSpec.scala:222)
[info] at org.ensime.sexp.formats.test.FamilyFormatsSpec$$anonfun$12.apply(FamilyFormatsSpec.scala:221)
FormatSpec.scala:11
ist, wo meine assertFormat
definiert ist. Das eigentliche Versagen ist in FamilyFormatsSpec.scala:222