2016-09-09 74 views
0

在ScalaTest您可以斷言使用assertResult宏這樣的期望值和實際值之間的區分ScalaTest期望值和實際值之間的區別:使用的匹配

assertResult(expected) { actual } 

這將打印「Expected X, but got Y」消息,當測試失敗,而不是通常的「X did not equal Y」。

如何使用(shouldmust等)匹配器實現類似的事情?

回答

1

匹配器會生成自己的錯誤消息,因此對於標準匹配器,您只需知道實際值是左邊那個。如果你想改變的消息,我相信你得寫像http://www.scalatest.org/user_guide/using_matchers#usingCustomMatchers定製匹配(下面的例子中忽略TripleEquals等):

trait MyMatchers { 
    class MyEqualMatcher[A](expectedValue: A) extends Matcher[A] { 
    def apply(left: A) = { 
     MatchResult(
     left == expectedValue, 
     s"""Expected $expectedValue, but got $left""", 
     s"""Got the expected value $expectedValue""" 
    ) 
    } 
    } 

    def equalWithMyMessage[A](expectedValue: A) = new MyEqualMatcher(expectedValue) // or extend Matchers and override def equal 
} 

// in test code extending the trait above 
x should equalWithMyMessage(y) 
+0

謝謝。太糟糕了,它不是建立在圖書館,但 –