注入模拟@Service用于弹簧单元测试

2022-09-02 12:40:47

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

public class RuleIdValidator implements ConstraintValidator<ValidRuleId, String> {

    @Autowired
    private RuleStore ruleStore;

    // Some other methods
}

但是,如何在测试期间模拟 ruleStore?我不知道如何将我的模拟RuleStore注入Spring和自动布线系统。

谢谢


答案 1

使用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);
    }
}

在Mockito javadoc或我前段时间写的关于该主题的博客文章中阅读有关@InjectMocks的更多信息。

从 Mockito 1.8.3 开始提供,在 1.9.0 中得到了增强。


答案 2

您可以使用类似 Mockito 的东西来模拟测试期间返回的规则库。这个Stackoverflow帖子有一个很好的例子:

弹簧 3 自动布线和 junit 测试


推荐