Câu hỏi của tôi rất giống với vấn đề được nêu ra trong Injecting Mockito mocks into a Spring bean. Trong thực tế, tôi tin rằng câu trả lời được chấp nhận có thể thực sự làm việc cho tôi. Tuy nhiên, tôi đã có một vấn đề với câu trả lời, và sau đó một số giải thích thêm trong trường hợp câu trả lời không có trong thực tế câu trả lời của tôi.Spring + Mockito test injection
Vì vậy, tôi đã theo liên kết trong bài đăng đã nói trên đến trang web Springockito. Tôi thay đổi test-config.xml
tôi để bao gồm một cái gì đó tương tự như sau:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mockito="http://www.mockito.org/spring/mockito"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.mockito.org/spring/mockito http://www.mockito.org/spring/mockito.xsd">
...
<mockito:mock id="accountService" class="org.kubek2k.account.DefaultAccountService" />
...
</beans>
Dường như có cái gì đó sai với hiện www.mockito.org
chuyển hướng, vì vậy tôi tìm thấy mã XSD tại https://bitbucket.org/kubek2k/springockito/raw/16143b32095b/src/main/resources/spring/mockito.xsd và thay đổi mục cuối cùng trong xsi: schemaLocation chỉ liên kết bitbucket này.
Chạy mvn test
sau đó tạo ra các lỗi sau (dòng mới thêm vào cho dễ đọc):
Caused by: org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException:
Line 43 in XML document from class path resource [spring/test-context.xml] is invalid;
nested exception is org.xml.sax.SAXParseException; lineNumber: 43; columnNumber: 91;
The prefix "mockito" for element "mockito:mock" is not bound.
Vì vậy, các câu hỏi liên quan Springockito là: Có thể nữa để bao gồm này? Tôi đang thiếu gì?
Bây giờ, trên để giải thích thêm ...
Tôi có một giao diện mà thực hiện Tôi đang cố gắng để kiểm tra:
public interface MobileService {
public Login login(Login login);
public User getUser(String accessCode, Date birthDate);
}
Việc thực hiện có chứa một DAO rằng mùa xuân @Autowire
s ở cho tôi :
@Service
public class MobileServiceImpl implements MobileService {
private MobileDao mobileDao;
@Autowired
public void setMobileDao(MobileDao mobileDao) {
this.mobileDao = mobileDao;
}
}
Tôi không muốn thay đổi giao diện của mình để bao gồm phương thức setMobileDao
, vì điều đó sẽ thêm mã chỉ để hỗ trợ đơn vị của tôi thử nghiệm. Tôi đang cố gắng để thử ra DAO kể từ khi SUT thực tế ở đây là ServiceImpl. Làm thế nào tôi có thể đạt được điều này?
@ Giống như tôi đồng ý, chỉ cần kiểm tra việc triển khai. Không có vấn đề gì để có bối cảnh mùa xuân cho thử nghiệm ** đơn vị **. Và bằng cách này, Mockito cung cấp một số cơ chế tiêm phụ thuộc tầm thường với sự kết hợp của các chú thích '@ Mock' và' @ InjectMocks'. Bạn sẽ thấy [javadoc] tương ứng của họ (http://docs.mockito.googlecode.com/hg/latest/org/mockito/Mockito.html). – Brice