我的问题非常类似于将Mockito模拟注入Spring bean时引发的问题.事实上,我相信那里接受的答案可能对我有用.但是,我有一个问题的答案,然后进一步解释,如果答案实际上没有我的答案.
所以我按照上述帖子中的链接访问了Springockito网站.我改变了我的内容test-config.xml,包括类似的内容:
<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>
Run Code Online (Sandbox Code Playgroud)
目前www.mockito.org重定向似乎有问题,所以我在https://bitbucket.org/kubek2k/springockito/raw/16143b32095b/src/main/resources/spring/mockito.xsd找到了XSD代码并更改了最终条目在xsi:schemaLocation中指向此bitbucket链接.
mvn test然后运行产生以下错误(为了可读性添加了换行符):
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.
Run Code Online (Sandbox Code Playgroud)
所以关于Springockito的问题是:是否有可能包括这个?我错过了什么?
现在,进一步解释......
我有一个接口,其实现我正在尝试测试:
public interface MobileService {
public Login login(Login login);
public User getUser(String accessCode, Date birthDate);
}
Run Code Online (Sandbox Code Playgroud)
该实现包含一个Spring @Autowire为我提供的DAO :
@Service
public class MobileServiceImpl implements MobileService {
private MobileDao mobileDao;
@Autowired
public void setMobileDao(MobileDao mobileDao) {
this.mobileDao = mobileDao;
}
}
Run Code Online (Sandbox Code Playgroud)
我不想改变我的界面以包含setMobileDao方法,因为这将添加代码只是为了支持我的单元测试.我试图模仿DAO,因为这里的实际SUT是ServiceImpl.我怎样才能做到这一点?
您不想测试您的界面:它根本不包含任何代码.您想测试您的实现.所以可以使用setter.只需使用它:
@Test
public void testLogin() {
MobileServiceImpl toTest = new MobileServiceImpl();
toTest.setMobileDao(mockMobileDao);
// TODO call the login method and check that it works as expected.
}
Run Code Online (Sandbox Code Playgroud)
不需要弹簧环境.只需实例化您的POJO服务,手动注入模拟依赖项,并测试您要测试的方法.
| 归档时间: |
|
| 查看次数: |
9971 次 |
| 最近记录: |