java - 为 Spring 单元测试注入(inject)模拟 @Service

标签 java unit-testing spring spring-mvc mockito

我正在测试一个使用 @Autowired 注入(inject)服务的类:

public class RuleIdValidator implements ConstraintValidator<ValidRuleId, String> {

    @Autowired
    private RuleStore ruleStore;

    // Some other methods
}

但是如何在测试期间模拟 ruleStore?我不知道如何将我的模拟 RuleStore 注入(inject) Spring 和 Autowiring 系统。

谢谢

最佳答案

Mockito 非常简单:

@RunWith(MockitoJUnitRunner.class)
public class RuleIdValidatorTest {
    @Mock
    private RuleStore ruleStoreMock;

    @InjectMocks
    private RuleIdValidator ruleIdValidator;

    @Test
    public void someTest() {
        when(ruleStoreMock.doSomething("arg")).thenReturn("result");

        String actual = ruleIdValidator.doSomeThatDelegatesToRuleStore();

        assertEquals("result", actual);
    }
}

阅读更多关于 @InjectMocks 的信息在 Mockito javadoc 或 blog post 中我前段时间写的关于这个主题的文章。

从 Mockito 1.8.3 开始可用,在 1.9.0 中增强。

关于java - 为 Spring 单元测试注入(inject)模拟 @Service,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4624080/

相关文章:

java - Tomcat 4.1.24、slf4j 1.6.4 和 activemq 5.5.1 不兼容

java - 在注释中注入(inject)值

c# - NUnit - 断言异常和属性

java - Spring Test无法获取Spring配置Bean

spring - 使用 Spring 2.5 从外部事务控制内部事务设置

java - 在将 Json 对象转换为 POJO 之前验证它 - 使用 @requestBody

ruby - 我如何模拟 "does not implement"特定方法的东西?

java - Spring Websocket 处理程序未向所有客户端发布消息

java - Spring Bean 战略模式

java - 如何从 JSP 自定义标记中读取上下文中的包?