2011-06-23 60 views

Trả lời

75

Bạn là người đầu tiên yêu cầu tính năng như vậy. Một cách để đạt được điều này là với withClue. Một cái gì đó như:

withClue("NumberOfElements: ") { NumberOfElements() should be (5) } 

Điều đó sẽ giúp bạn có được thông điệp này lỗi:

NumberOfElements: 10 là không tương đương với 5

Nếu bạn muốn kiểm soát thông điệp hoàn toàn bạn có thể viết một khớp tùy chỉnh. Hoặc bạn có thể sử dụng xác nhận, như sau:

assert(NumberOfElements() == 5, "NumberOfElements should be 5") 

Bạn có thể giải thích về trường hợp sử dụng của mình không? Tại sao nó là 10 mà không bằng 5 không phải là để snuff, và bao lâu bạn đã có nhu cầu này?

Dưới đây là các loại điều bạn đang yêu cầu:

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) 

Vì vậy, bằng cách này bạn có thể viết:

{ NumberOfElements() should be (5) } withMessage ("NumberOfElements:") 
+0

Có những tình huống mà tôi đã phải đặt nhiều hơn một sự khẳng định trong một nó () thử nghiệm và có nhiều hơn một so sánh số nguyên. Nó không phải là rõ ràng bằng cách nhìn vào các bản ghi mà khẳng định đã thất bại. –

+0

Nhưng cách withClue chỉ định nó không thể đọc được. Không có cách nào để chỉ định thông báo ở cuối? –

+1

Cuối cùng không thể thực hiện được với DSL của đối sánh, nhưng bạn có thể viết một phương thức đặt các tham số withClue theo thứ tự ngược lại. Tôi sẽ thêm một ví dụ cho câu trả lời. –

Các vấn đề liên quan