2012-10-12 23 views
9

phương pháp tương đương là gì sau:Phương pháp tương đương cho @InjectMocks

@Mock 
MyType1 myType1; 

@Autowired 
@InjectMocks 
MyType2 myType2; 

Tôi có thể thay thế @Mock với mock(MyType1.class).

Nhưng làm thế nào tôi có thể thay thế @InjectMocks bằng một cuộc gọi phương thức? Một cái gì đó như thế này:

injectMocks(MyType2.class) 

Trả lời

2

Tại sao sử dụng Autowired trong thử nghiệm junit của bạn? Vì bạn đang chế nhạo các phụ thuộc cho MyType2, bạn phải biết việc triển khai đồng thời của nó khi bạn viết bài kiểm tra của mình.

Sau đó, bạn không cần và không nên sử dụng Spring hoặc bất kỳ khuôn khổ tiêm nào để tạo phiên bản MyType2 mà bạn muốn kiểm tra. Tạo nó trực tiếp trong quá trình khởi tạo thử nghiệm của bạn! Tôi biết rằng sau một vài năm sử dụng khung công tác IoC, thật khó để viết myType2 = new MyType2Impl(mock(myType1.class)) nhưng nó thực sự sẽ làm cho các bài kiểm tra của bạn đơn giản hơn và nhanh hơn (vì không có bối cảnh ứng dụng nào để xây dựng). ví dụ .:

@Before 
public void setup() { 
    myType1 = mock(MyType1.class); 
    myType2 = new MyType2Impl(myType1); 
} 

Nhưng nếu bạn thực sự muốn sử dụng IoC trong các thử nghiệm junit của bạn, sử dụng springockito đã được đề xuất bởi Brice, và xây dựng mô hình MyType1 trong bối cảnh ứng dụng của bạn.

+1

Liên kết đã chết. –

+0

IOC là gì ???? – jonney

8

Không có API công khai nào trong Mockito để tiêm mô hình. Thêm vào đó, chú thích này chủ yếu dựa vào cách mọi thứ được đưa ra trong một bài kiểm tra, nó khá liên quan đến giai đoạn khởi tạo của bài kiểm tra.

Mặc dù nó có thể thay đổi tại một thời điểm nào đó trong tương lai.

Tuy nhiên, trường có chú thích Mockito có thể được khởi tạo theo MockitoJUnitRunner hoặc MockitoAnnotations.initMocks(). Cả hai đều tạo ra các trường hợp giả và thực hiện tiêm.

Ngoài ra tôi thấy trong mã của bạn rằng bạn đang sử dụng @Autowired - do đó công cụ mùa xuân, có thể được định cấu hình qua XML. @InjectMocks không thực sự được phát triển để làm việc với các khuôn khổ tiêm phụ thuộc khác, vì sự phát triển được thúc đẩy bởi các trường hợp sử dụng thử nghiệm đơn vị, không phải kiểm thử tích hợp.

Bạn có thể muốn xem springockito, một dự án khác cố gắng làm giảm sự tạo mô hình Mockito trong mùa xuân.

Hy vọng rằng sẽ giúp

+0

Liên kết đã chết. –

+1

@TarunMaganti Tôi đã cập nhật liên kết. Có vẻ như bây giờ có một số nhánh của springockito, tôi nghĩ rằng đây là một trong những chính thức, nhưng kiểm tra trước khi sử dụng nó;) – Brice

Các vấn đề liên quan