gpt4 book ai didi

Spring + Mockito 测试注入(inject)

转载 作者:行者123 更新时间:2023-12-03 03:14:56 25 4
gpt4 key购买 nike

我的问题与 Injecting Mockito mocks into a 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>

目前 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.

所以关于 Springockito 的问题是:是否可以再包含这个?我错过了什么?

现在,进行进一步的解释...

我有一个接口(interface),我正在尝试测试其实现:

public interface MobileService {
public Login login(Login login);
public User getUser(String accessCode, Date birthDate);
}

该实现包含 Spring @Autowire 为我提供的 DAO:

@Service
public class MobileServiceImpl implements MobileService {
private MobileDao mobileDao;

@Autowired
public void setMobileDao(MobileDao mobileDao) {
this.mobileDao = mobileDao;
}
}

我不想更改我的界面以包含 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.
}

不需要 spring 上下文。只需实例化您的 POJO 服务,手动注入(inject)模拟依赖项,然后测试您想要测试的方法即可。

关于Spring + Mockito 测试注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7813741/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com