Về cơ bản, spring đủ thông minh để định cấu hình điều này cho bạn nếu bạn có cùng cấu hình ngữ cảnh ứng dụng trên các lớp thử nghiệm khác nhau. Ví dụ, giả sử bạn có hai lớp A và B như sau:
@ActiveProfiles("h2")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class A {
@MockBean
private C c;
}
@ActiveProfiles("h2")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class B {
@MockBean
private D d;
}
Trong ví dụ này, lớp A chế nhạo bean C, trong khi lớp B chế nhạo bean D. Vì vậy, spring coi đây là hai cấu hình khác nhau và do đó sẽ tải ngữ cảnh ứng dụng một lần cho lớp A và một lần cho lớp B.
Nếu thay vào đó, chúng tôi muốn có Spring chia sẻ bối cảnh ứng dụng giữa hai lớp này, chúng sẽ phải trông giống như sau:
@ActiveProfiles("h2")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class A {
@MockBean
private C c;
@MockBean
private D d;
}
@ActiveProfiles("h2")
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
public class B {
@MockBean
private C c;
@MockBean
private D d;
}
Nếu bạn sắp xếp các lớp của mình như thế này, spring sẽ tải ngữ cảnh ứng dụng chỉ một lần cho lớp A hoặc B tùy thuộc vào lớp nào trong số hai lớp được chạy trước trong bộ thử nghiệm. Điều này có thể được nhân rộng trên nhiều lớp thử nghiệm, chỉ có tiêu chí là bạn không nên tùy chỉnh các lớp thử nghiệm một cách khác nhau. Bất kỳ tùy chỉnh nào dẫn đến lớp thử nghiệm khác với lớp khác (trong mắt của mùa xuân) cuối cùng sẽ tạo ra một bối cảnh ứng dụng khác vào mùa xuân.