Tôi có một hạng A được sử dụng 3 lớp differnt với autowiringLàm thế nào để sử dụng @InjectMocks cùng với chú thích @Autowired trong Junit
public class A() {
@Autowired
private B b;
@Autowired
private C c;
@Autowired
private D d;
}
Trong khi thử nghiệm chúng, tôi muốn chỉ có 2 của lớp (B & C) như mocks và có lớp D được Autowired như chạy bình thường, mã này không làm việc cho tôi:
@RunWith(MockitoJUnitRunner.class)
public class aTest() {
@InjectMocks
private A a;
@Mock
private B b;
@Mock
private C c;
@Autowired
private D d;
}
là nó thậm chí có thể làm như vậy?
Có cách nào tôi có thể tiếp tục sử dụng @RunWith (MockitoJUnitRunner.class) và giải quyết vấn đề này không? mã trên chỉ là một phần của lớp thử nghiệm lớn hơn, và tôi không thể thay đổi cách chúng ta chạy junits – USer22999299
Có thể, nhưng bạn không thể sử dụng 'Autowired' trong trường hợp đó, bạn phải tự mã hóa để khởi tạo ngữ cảnh mùa xuân. của 'A' –
Có một trường hợp khi phương pháp này không hoạt động: khi' A' được chú thích bằng '@ Transactional' (hoặc có các phương thức được chú thích bằng' @ Transactional'); xem http://stackoverflow.com/questions/12857981/transactional-annotation-avoids-services-being-mocked và http://stackoverflow.com/questions/21124326/how-to-inject-mock-into-service-that - Giao dịch –