Trong thử nghiệm JUnit trong ứng dụng Spring của tôi, tôi muốn chèn rất nhiều dữ liệu vào một phương pháp thiết lập và sau đó sử dụng nó để kiểm tra. Tuy nhiên, bất cứ điều gì được thực hiện trong phương pháp @Before
dường như được cuộn lại sau mỗi lần kiểm tra, ngay cả khi tôi chú thích phương pháp này với @Rollback(false)
@Rollback (false) không hoạt động trên @Trước khi sử dụng SpringJUnit4ClassRunner
Dưới đây là một phiên bản đơn giản của những gì tôi đang cố gắng để làm:
public class TestClass
{
@Autowired
MyService service;
@Before
public void setup()
{
if(service.getById(1) == null)
{
Thing thing = new Thing();
thing.setId(1);
service.create(new Thing(1))
}
}
}
Tôi cũng đã thử sử dụng @BeforeClass
, nhưng yêu cầu phương thức tĩnh và thực thi trước khi bất kỳ phương thức seter @Autowired
nào được gọi, vì vậy tôi không thể truy cập vào các dịch vụ tôi cần gọi khi chạy @BeforeClass
.
Tôi đã thử sử dụng @PostConstruct
, nhưng có vấn đề với việc có giao dịch có sẵn (và thiết lập của tôi sao cho phiên Hibernate chỉ khả dụng khi giao dịch bắt đầu). Kỳ lạ một phiên dường như có sẵn, nhưng hai đối tượng nhận được từ bên trong cùng một phiên không bằng nhau, có nghĩa là bộ nhớ đệm cấp 1 Hibernate dường như không hoạt động hoặc mỗi hoạt động diễn ra trong một phiên riêng biệt. @BeforeTransaction
dường như thể hiện cùng một hành vi.
Bạn đặt chú thích '@ Rollback' ở cấp lớp hoặc phương thức ở đâu? – Ralph
@Ralph Tôi đã thử cả hai phương thức 'setup()' '@Rollback (false)', và sau đó cũng trên lớp trong khi cũng chú thích các phương thức thử nghiệm với '@ Rollback'. –
Bạn đã bao giờ tìm cách để đạt được điều này? – Arjan