2010-09-11 6 views
7

Trong thử nghiệm đơn vị của tôi, tôi muốn thể hiện rằng một chuỗi (kết quả) được tính toán mang lại chuỗi giá trị kết quả được xác định trước. Nhưng không giả định bất cứ điều gì về loại triển khai thực tế của vùng chứa chuỗi.ScalaTest: kiểm tra nội dung của một chuỗi với ShouldMatcher

Và tôi muốn đánh vần mục đích của mình khá rõ ràng và tự giải thích.
Nếu tôi cố gắng sử dụng "ShouldMatchers" của ScalaTest và viết

val Input22 = ... 
calculation(Input22) should equal (Seq("x","u")) 

... sau đó tôi nhận được vào rắc rối với sự bình đẳng đơn giản, bởi vì calculation(..) có thể trả về một ArrayBuffer, trong khi Seq("x","u") là một Danh sách

+1

Hãy nhớ rằng bạn có thể chấp nhận câu trả lời nếu nó đúng, bằng cách nhấp vào đường viền hộp kiểm. –

Trả lời

2
import org.specs.matcher.IterableMatchers._ 
calculation(Input22) should beTheSameSeqAs (Seq("x","u")) 
+0

ah cảm ơn ... đó là tốt đẹp – Ichthyo

+0

nhưng trong chương trình hiện tại của tôi, tôi không có một phụ thuộc vào * specs * được nêu ra và tôi miễn cưỡng để thêm nó. Vì vậy, tôi đã kết thúc việc triển khai trình kết hợp tùy chỉnh của riêng mình, điều này đã cho tôi chính xác giải pháp tương tự. Xem http://www.scalatest.org/scaladoc/doc-1.2/org/scalatest/matchers/Matcher.html – Ichthyo

+0

Bạn có sợ thông số kỹ thuật không? Nó khá tuyệt vời. Nắm lấy nó. – Synesso

4

Bạn đang sử dụng 2.7.7? Trong 2,8 khác nhau Seq với các yếu tố bằng nhau (theo thứ tự) cần được bình đẳng:

scala> import org.scalatest.matchers.ShouldMatchers._ 
import org.scalatest.matchers.ShouldMatchers._ 

scala> import scala.collection.mutable.ArrayBuffer 
import scala.collection.mutable.ArrayBuffer 

scala> val list = List(1, 2, 3) 
list: List[Int] = List(1, 2, 3) 

scala> val arrayBuffer = ArrayBuffer(1, 2, 3) 
arrayBuffer: scala.collection.mutable.ArrayBuffer[Int] = ArrayBuffer(1, 2, 3) 

scala> list == arrayBuffer 
res2: Boolean = true 

scala> arrayBuffer == list 
res3: Boolean = true 

scala> list should equal (arrayBuffer) 

scala> arrayBuffer should equal (list) 

Một ngoại lệ cho quy tắc này trong 2,8 là mảng, mà chỉ có thể tương đương với các mảng khác, bởi vì họ là những mảng Java . (Các mảng Java không được so sánh về mặt cấu trúc khi bạn gọi .equals trên chúng, nhưng các đối sánh ScalaTest thực hiện sự bình đẳng về cấu trúc trên hai mảng.)

+0

Còn gì tốt hơn là một câu trả lời từ chính cha của anh ta? =) –