2015-06-28 18 views
9

Tôi có câu hỏi về cách sử dụng SpringJUnit4ClassRunner. Đối với các trường hợp Junits hoặc Unit Test thuần túy, chúng tôi có sử dụng chú thích dựa trên Spring như @Autowired cùng với SpringJUnit4ClassRunner hay chúng tôi chỉ nên sử dụng MockitoJUnitRunner thay vì chú thích @RunWith ở đầu lớp Kiểm tra?Sử dụng MockitoJUnitRunner.class thay vì SpringJUnit4ClassRunner.class

tôi có nghĩa là thay thế

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration({ "classpath:test-applicationContext.xml" }) 

chỉ với

@RunWith(MockitoJUnitRunner.class) 

ở phía trên cùng của lớp. Nó làm việc cho tôi.

Trong Junits, chúng tôi thường không thực hiện bất kỳ cuộc gọi bên ngoài nào như gọi tới DB hoặc gọi tới một số dịch vụ web khác. Chúng tôi phải thử các cuộc gọi bên ngoài này bằng cách sử dụng các chú thích @Mock trên các đối tượng dịch vụ này. Và sau đó tạo ra một đối tượng thực sự của lớp mà chúng tôi đang thử nghiệm và điều đó phụ thuộc vào các mocks này. Sau đó chúng ta có thể sử dụng @InjectMocks trên đối tượng thực để nó sẽ được tiêm với các đối tượng giả.

Ví dụ Service-A-> Calls-> Dịch vụ-B-> Calls-> Dịch vụ-C

Trong khi kiểm tra Một chúng ta nên thử dịch vụ B & trong khi thử nghiệm dịch vụ-B chúng ta nên thử dịch vụ-C.

Một số mã Snippet

@RunWith(MockitoJUnitRunner.class) 
public class TestServiceA { 
    @Mock 
    B mockObj; 

    @InjectMocks 
    A realObj; 

    @Test 
    public void testServiceA() { 
    ..... 
    ..... 
    } 
}  

Vì vậy, tôi cảm thấy đối với trường hợp kiểm tra Đơn vị chúng tôi không cần phải dựa vào thùng chứa mùa xuân để cung cấp cho chúng tôi các thể hiện của lớp chúng tôi đang thử nghiệm.

Vui lòng đưa ra đề xuất của bạn.

Sử dụng SpringJUnit4ClassRunner.class thay vì MockitoJUnitRunner.class

+0

Bài kiểm tra của bạn không chứa bất kỳ thứ gì đòi hỏi sự can thiệp của Spring, vì vậy rõ ràng là bạn không cần nó. –

+0

@SotiriosDelimanolis - Cảm ơn bạn đã trả lời. Đây thực sự là một mã giả tương tự như mã của dự án của tôi. Thực ra ngay từ đầu nó đã có SpringJUnit4ClassRunner.class & ContextConfiguration ({"classpath: test-applicationContext.xml"}) ở đầu lớp và chú thích Autowired trên cả hai đối tượng A & B. Không có chế nhạo. Tôi đã loại bỏ tất cả chúng. Vì vậy, về cơ bản tôi muốn biết liệu việc chế giễu này có phải là cách chính xác để làm Junits hay không. Do Spring test framework cũng cung cấp hỗ trợ cho các đối tượng nhại. Asa hiển thị ở đây tôi đang sử dụng thư viện Mockito để giả lập các đối tượng. – Ayaskant

+0

Cũng nghĩ theo cách khác - Chúng ta có thực sự cần thư viện SpringJUnit4ClassRunner và Spring trong Junits không? – Ayaskant

Trả lời

-2

Đối với đơn vị xét nghiệm chúng ta không cần mùa xuân, nhưng cần phải nhanh chóng một phần của bối cảnh mùa xuân cho thử nghiệm tích hợp, chế giễu Data Access Layer/Integration. Bạn có thể sử dụng TestNG thay vì JUnit và sử dụng bất kỳ khung công tác nào như một bộ khai thác để Tích hợp và thậm chí là Kiểm tra Tích hợp Hệ thống.

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