Trong khi di chuyển một số thử nghiệm từ JUnit sang TestNG, tôi đang gặp phải sự cố vì sự khác biệt trong cách các khung kiểm tra này xử lý các cá thể lớp Test của chúng.Khởi tạo và dọn sạch dữ liệu thử nghiệm cho các thử nghiệm song song trong TestNG
JUnit tạo phiên bản mới của lớp Kiểm tra cho từng phương pháp thử nghiệm. Vì vậy, một mẫu phổ biến tôi thấy là:
public class MyTest {
private Stream inputData;
@Before
public void setUp() {
// Set up some data in (non-static) instance fields
// This data is isolated per test
inputData = createInputDataStream();
}
@Test
public void testStuff() {
// Use the data from the instance fields
doStuff(inputData);
}
@After
public void tearDown() {
// Clean up the data from the instance fields
closeInputDataStream(inputData);
}
}
Ngược lại, TestNG sử dụng một cá thể duy nhất của lớp Kiểm tra cho tất cả các phương pháp thử nghiệm. Vì vậy, mô hình trên không hoạt động! Vì dữ liệu được lưu trữ trong các trường mẫu, các giá trị không còn bị cô lập nữa. Điều này có thể gây ra dữ liệu ghi đè giữa kiểm tra nếu thực hiện song song được kích hoạt.
Vậy làm cách nào để tôi thực hiện việc này với TestNG? Có cách nào để lưu trữ dữ liệu được phân tách cho mỗi @BeforeMethod
- @Test
- @AfterMethod
bộ dữ liệu không?
Tôi có thể tự làm tất cả 3 bước trong chính số @Test
, nhưng điều đó sẽ yêu cầu thêm các khối vô hạn try...finally
vào mọi thử nghiệm. Tôi cũng đã thử sử dụng ITestContext
, nhưng nó cũng dường như được chia sẻ cho toàn bộ chạy thử nghiệm.
'@ BeforeMethod' và '@AfterMethod 'được gọi xung quanh mỗi lệnh gọi' @ Test'; vì vậy đây là nghĩa vụ phải làm việc chính xác như bạn mô tả. Sự khác biệt duy nhất là bạn có thể ghi đè lên trạng thái lớp mỗi lần - thay vì tạo một cá thể mới. Bạn có nhận thấy bất kỳ hành vi bất ngờ nào với cách tiếp cận đó không? Hay bạn đang cố gắng chạy tất cả các bài kiểm tra trong lớp song song (tôi sợ điều đó là không thể)? –
@CostiCiudatu Chủ yếu trong khi thực hiện song song - các giá trị đôi khi bị ghi đè giữa kiểm tra. – metacubed
Nếu bạn muốn chạy các phương thức thử nghiệm trong lớp song song (''), không có cách nào để bảo vệ khỏi các điều kiện chủng tộc, vì bạn đang thay đổi trạng thái có thể thay đổi. –