Có cách nào để biết trong Lớp kiểm tra JUnit 4 không, nếu Lớp học được khởi xướng bởi một Test-Suite? Tôi có những thứ toàn cầu mà tôi muốn chạy trước tất cả các bài kiểm tra (liên quan đến bộ nhớ trong DB), vì vậy tôi nghĩ rằng nó sẽ làm trong thử nghiệm. Tuy nhiên, tôi vẫn muốn có thể bắt đầu một bài kiểm tra tại một thời điểm mà không cần Test-Suit, Vì vậy, tôi cần phải biết liệu tôi có cần khởi tạo những thứ toàn cầu trong phần @ Trước khi kiểm tra ... Có ai biết không nếu có thể ?Yêu cầu kiểm tra: cách thiết lập chung cho tất cả các phòng thử nghiệm
Trả lời
Có một số cách để đạt được điều này. Cách dễ nhất và đơn giản nhất là có 'kiểm tra' được chạy ở đầu và cuối bộ phần mềm của bạn để thiết lập cơ sở dữ liệu của bạn và sau đó đặt cờ toàn cầu. Trong các bài kiểm tra @Before và @After của bạn, bạn kiểm tra cờ này và nếu cần thiết, hãy thiết lập/rách.
@RunWith(Suite.class)
@SuiteClasses({SetupTest.class, RealTest.class, TeardownTest.class});
Đây là giải pháp đơn giản nhất, nhưng nó không phải là rất tốt đẹp, do đó, giải pháp neater sẽ là sử dụng TestRule. Xem xét mở rộng ExternalResource. Công cụ này triển khai trước & sau khi logic bao quanh các phương pháp thử nghiệm của bạn. Điều này sẽ cho phép bạn đưa ra các phương pháp @Trước và @After của bạn, để sử dụng lại cùng một mã ở mọi nơi.
Sau đó, đối với suite của bạn, bạn cũng cần triển khai trước/sau logic. Thật không may, lớp được chú thích với @RunWith (Suite.class) không thực sự được khởi tạo, vì vậy bạn không thể sử dụng hàm tạo của lớp đó, nhưng bạn có thể mở rộng Suite. Tùy thuộc vào cách bạn sẽ chạy này, bạn sẽ sẽ cần phải thực hiện một trong những nhà xây dựng, sử dụng @RunWith làm ví dụ:
public class MySuite extends Suite {
/**
* Called reflectively on classes annotated with <code>@RunWith(Suite.class)</code>
*
* @param klass the root class
* @param builder builds runners for classes in the suite
* @throws InitializationError
*/
public MySuite(Class<?> klass, RunnerBuilder builder) throws InitializationError {
this(builder, klass, getAnnotatedClasses(klass));
// put your global setup here
// set global variable
}
}
Sau đó chạy bộ kiểm tra của bạn với
@RunWith(MySuite.class)
Có một số nhà xây dựng được sử dụng trong các tình huống khác nhau, hãy xem các nhận xét bên cạnh từng chi tiết cụ thể. Bạn vẫn cần sử dụng biến toàn cục để Quy tắc của bạn không thực thi lại mã thiết lập. Ở trên sẽ làm việc nếu bạn chỉ muốn thực thi mã thiết lập, việc thực thi mã teardown khó hơn, nhưng có thể thực hiện được. Hãy cho tôi biết nếu bạn cần :-)
Nếu bạn muốn linh hoạt hơn (chỉ thực thi mã thiết lập cho các phương pháp cụ thể), thì hãy xem câu trả lời của tôi cho How to define JUnit method rule in a suite?.
Tôi sẽ sử dụng chú thích @BeforeClass và @AfterClass của JUnit để chỉ ra các phương pháp để thực hiện loại công việc này.
Từ Javadoc @BeforeClass:
Đôi khi một số xét nghiệm cần chia sẻ tính toán đắt tiền thiết lập (như cách đăng nhập vào một cơ sở dữ liệu). Trong khi điều này có thể thỏa hiệp sự độc lập của các thử nghiệm, đôi khi nó là một tối ưu hóa cần thiết. Chú thích phương thức public void no-arg với @BeforeClass gây ra nó sẽ được chạy một lần trước bất kỳ phương pháp thử nào trong lớp. Phương thức của các lớp siêu lớp @BeforeClass sẽ được chạy trước các lớp hiện tại.
Điều này liên quan đến một số phương thức @Test được chú thích bên trong một tệp Lớp thử nghiệm, đây không phải là kịch bản mà tôi đang xử lý, tôi cần nó cho một vài CLASSES thử nghiệm. – stdcall
Bạn có thể đặt một số mã @BeforeClass
trong mỗi bộ kiểm tra, ủy quyền cho một lớp phụ trợ được thiết lập chung. Lớp phụ trợ có thể có một số static boolean
ghi lại việc thiết lập đã được thực hiện hay chưa. Nếu nó đã được thực hiện, lớp phụ trợ sẽ không làm gì cả.
- 1. Đặt tiêu đề HTTP cho tất cả các yêu cầu trong thử nghiệm Flask
- 2. Cách đặt danh mục thử nghiệm cho tất cả các bài kiểm tra trong lớp
- 3. Kiểm tra đơn vị trong QTestLib - chạy thử nghiệm/kiểm tra đơn trong lớp/tất cả các bài kiểm tra
- 4. Kiểm tra Node.js, thử và thử nghiệm một mô-đun đã được yêu cầu?
- 5. Thiết lập Xác thực cơ bản HTTP cho tất cả các yêu cầu
- 6. chạy tất cả các thử nghiệm đơn vị zend framework2
- 7. Thiết lập bộ thử nghiệm trong Ruby
- 8. Phương pháp thiết lập bộ thử nghiệm có được thực hiện một lần cho mỗi thử nghiệm hay chỉ một lần cho tất cả?
- 9. Làm thế nào để thiết lập biến môi trường cho tất cả các thử nghiệm trong Eclipse?
- 10. spring mvc nhận tất cả các ánh xạ yêu cầu
- 11. NUnit - Tải TẤT CẢ TestCaseSources ngay cả khi chúng không được yêu cầu bởi thử nghiệm hiện tại
- 12. Máy chủ yêu cầu kiểm tra đường ray thử nghiệm mặc định
- 13. IntelliJ thiếu tất cả các kiểm tra
- 14. Làm thế nào để thiết lập một điểm ngắt trong gdb cho tất cả các yêu cầu của một hàm?
- 15. Khai thác thử nghiệm chung cho java.util.Map?
- 16. JUnit 4: Thiết lập mọi thứ trong một bộ thử trước khi chạy thử nghiệm (như phương pháp @BeforeClass của thử nghiệm, chỉ dành cho bộ thử nghiệm)
- 17. CORS trong grails - Tất cả các yêu cầu thất bại?
- 18. Thử nghiệm đơn vị Laravel - Chạy tất cả các thử nghiệm
- 19. Chạy tất cả các thử nghiệm mở trong Visual Studio
- 20. Thử nghiệm lập trình
- 21. Bộ lọc Servlet cho tất cả các yêu cầu
- 22. Yêu cầu tệp js bên ngoài để thử nghiệm mocha
- 23. Tất cả các kiểm tra không hoàn thành - xcode 4.5
- 24. Làm thế nào để thử đối tượng yêu cầu cho các thử nghiệm trợ giúp rspec?
- 25. JUnit4 chạy tất cả các thử nghiệm trong một gói cụ thể bằng cách sử dụng một kiểm tra
- 26. Cách đợi thiết lập không đồng bộ trong thử nghiệm đơn vị, trong Dart?
- 27. org.scalatest: Thiết lập chung (như beforeAllSuites?)
- 28. Ant, chạy tất cả JUnit thử nghiệm
- 29. Làm cách nào để thiết lập thử nghiệm tải/căng thẳng cho trang web?
- 30. Junit nhiều thiết lập và thử nghiệm duy nhất
Hầu hết các liên kết đều đã chết. – Nadar