2011-12-13 18 views
9

Tôi có một ứng dụng scala với một số thử nghiệm bằng cách sử dụng org.scalatest. Những thử nghiệm này cần một số thiết lập toàn cầu (và teardown), để quản lý cơ sở dữ liệu thử nghiệm.org.scalatest: Thiết lập chung (như beforeAllSuites?)

Xin vui lòng không cho tôi biết các bài kiểm tra của tôi không nên nhấn vào cơ sở dữ liệu và tôi nên làm điều đó Java-DAO-Stub-WTF-Overkill-Way ™ :-).

Tôi đang chạy các bài kiểm tra sử dụng SBT, trong đó cung cấp một cách để thực thi mã trước và sau khi kiểm tra:

testOptions in Test += Tests.Setup(() => println("Setup")) 

    testOptions in Test += Tests.Cleanup(() => println("Cleanup")) 

Đáng tiếc là tôi không thể truy cập vào các lớp học trong câu hỏi đó. Không ngạc nhiên, việc nhập chúng vào build.sbt cũng không hoạt động.

Bất kỳ ý tưởng nào?

+0

Tôi đã có một mục tiêu rất giống nhau và tìm thấy một giải pháp cho nó. Kiểm tra câu hỏi này: http://stackoverflow.com/questions/27272811/how-to-cut-a-long-scalatest-spec-to-pieces/27275814 Muốn giữ lại bước khởi tạo như một lớp thử nghiệm. – akauppi

Trả lời

4

Bạn có thể sử dụng các đặc điểm BeforeAndAfterAll hoặc BeforeAndAfter tùy theo nhu cầu của bạn.

BeforeAndAfterAll:

Trait có thể được trộn vào dãy phòng mà cần phương pháp gọi trước và sau khi thực hiện bộ. Đặc điểm này cho phép mã được thực hiện trước và/hoặc sau khi tất cả các thử nghiệm và dãy lồng nhau của một bộ là chạy.

Vì vậy, trong trường hợp này, bạn sẽ xác định MasterSuite chứa tất cả các Suite/Thử nghiệm khác, mở rộng đặc điểm này.

BeforeAndAfter:

Trait có thể được trộn vào dãy phòng mà cần mã thực hiện trước và sau khi chạy mỗi bài kiểm tra. Đặc điểm này tạo điều kiện cho một kiểu thử nghiệm trong đối tượng cố định có thể thay đổi được giữ trong các biến mẫu được thay thế hoặc khởi động lại trước mỗi thử nghiệm hoặc bộ.

+3

Xác định MasterSuite có nghĩa là tất cả các bài kiểm tra của tôi cần được xác định trong một tệp duy nhất, đúng không? Hiện tại, tôi đã tách tất cả các kiểm tra dựa trên cơ sở dữ liệu thành một bộ và sử dụng BeforeAndAfterAll ở đó. Điều này cũng có lợi thế là tôi có thể bỏ qua những bài kiểm tra chậm một cách dễ dàng. –

+3

Nhiều năm sau, nhưng vẫn liên quan đến bất kỳ ai tìm câu hỏi: bạn không cần xác định tất cả các bài kiểm tra trong một tệp, ScalaTest có chức năng thành phần nơi bạn có thể sử dụng 'lớp MasterSuite extends Suites (new OneSpec, new TwoSpec)' để các bộ soạn thảo đơn giản cần phải nằm trên classpath (Scaladoc 'BeforeAndAfterAll' có một ví dụ về điều này, do đó dễ dàng nhớ lại). Kể từ 2.0 ScalaTest có chú thích '@ DoNotDiscover' để bạn có thể dừng SBT (hoặc bất kỳ nhân vật hỗ trợ nào) chạy tất cả các bộ soạn thảo, chỉ có chủ. – ches

+0

Trên thực tế tác giả bao gồm nó ở đây: http://stackoverflow.com/questions/15423337/doing-something-before-or-after-all-scalatest-tests – ches

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