2011-07-24 31 views
9

Trong TestNg và Java, chúng ta có thể chạy nhiều trường hợp thử nghiệm bằng cách sử dụng DataProvider, và điều này chạy như các kiểm tra riêng biệt, có nghĩa là thực hiện kiểm tra không dừng lại trên thất bại. Có một tương tự cho ScalaTest hoặc Specs/Specs2?Scalatest hoặc specs2 với nhiều trường hợp thử nghiệm

+0

Câu hỏi khó hiểu. Vui lòng cung cấp ví dụ về ý của bạn. –

Trả lời

24

Trong cả hai ScalaTest và specs2, thật dễ dàng để tạo các trường hợp thử nghiệm tại thời gian chạy, để tham số hóa chúng với dữ liệu. Dưới đây là một ví dụ với specs2:

class BasketSpecification extends Specification { 

    "a basket must contain fruits" >> { 
     Seq(apple, banana, orange) foreach { fruit => 
     ("it contains: " + fruit) >> { 
      basket must contain(fruit) 
     } 
     } 
    } 
    } 

Sau đó, đầu ra là:

A basket must contain fruits 
+ it contains: apple 
+ it contains: banana 
+ it contains: orange 

Trong khi đặc điểm kỹ thuật sau:

class BasketSpecification extends Specification { 

    "a basket must contain fruits" >> { 
     Seq(apple, cake, orange) foreach { fruit => 
     ("it contains: " + fruit) >> { 
      basket must contain(fruit) 
     } 
     } 
    } 
    } 

sẽ in ra một cái gì đó như:

A basket must contain fruits 
+ it contains: apple 
x it contains: cake 
    'basket' does not contain 'cake' 
+ it contains: orange 
+0

Đọc lại câu hỏi của tôi. Phương pháp của bạn chạy như MỘT thử nghiệm, có nghĩa là một thất bại trong một trường hợp là một thất bại của thử nghiệm. trong TestNg, điều này sẽ được chạy như ba thử nghiệm, và do đó thông tin thất bại có ý nghĩa – user44242

+0

Xin lỗi rằng không rõ ràng từ đặc điểm kỹ thuật chỉ là nó thực sự tạo ra 3 thử nghiệm. Tôi đã thêm đầu ra để hiển thị điều đó. – Eric

+0

Xem cú pháp được cập nhật: http://etorreborre.github.io/specs2/guide/org.specs2.guide.Matchers.html#With+sequences –

9

Khái niệm đó được gọi là "shar kiểm tra ed "trong ScalaTest, bởi vì cùng một mã kiểm tra đang được" chia sẻ "bởi nhiều đồ đạc, trong đó" đồ đạc "là" dữ liệu "trong phương pháp DataProvider của TestNG. Có một cách để làm điều này cho mỗi đặc điểm phong cách trong ScalaTest thể hiện các bài kiểm tra như các hàm. Dưới đây là một ví dụ cho WordSpec:

http://www.scalatest.org/scaladoc-1.6.1/#[email protected]

Bạn có thể cách khác chỉ cần sử dụng một vòng lặp for để đăng ký mã kiểm tra tương tự cho các điểm dữ liệu khác nhau. Đây đã đưa ra trong một cuộc thảo luận email đó là ở đây:

http://groups.google.com/group/scalatest-users/browse_thread/thread/7337628407b48064#

Các mã vòng lặp trong trường hợp đó trông giống như:

for (browser <- List("IE", "Chrome", "Firefox")) { 
    test(browser + ": test one") { driver => 
     info("Testing using " + driver) 
    } 
    test(browser + ": test two") { driver => 
     info("Testing using " + driver) 
    } 
    test(browser + ": test three") { driver => 
     info("Testing using " + driver) 
    } 
    test(browser + ": test four") { driver => 
     info("Testing using " + driver) 
    } 
    test(browser + ": test five") { driver => 
     info("Testing using " + driver) 
    } 
    } 
} 

Điều này thực sự đăng ký 15 bài kiểm tra, năm kiểm tra cho mỗi tài xế trình duyệt. Điều này tôi tin là những gì bạn đang sau.

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