为Spring单元测试注入模拟@Service

Ste*_*eve 18 java spring unit-testing spring-mvc mockito

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

public class RuleIdValidator implements ConstraintValidator<ValidRuleId, String> {

    @Autowired
    private RuleStore ruleStore;

    // Some other methods
}
Run Code Online (Sandbox Code Playgroud)

但是如何在测试期间模拟ruleStore?我无法弄清楚如何将我的模拟RuleStore注入Spring并进入自动布线系统.

谢谢

mat*_*sev 15

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);
    }
}
Run Code Online (Sandbox Code Playgroud)

了解更多关于@InjectMocks中的javadoc的Mockito或在博客中,我前段时间写的话题.

自Mockito 1.8.3起可用,增强型1.9.0.


Jon*_*Jon 10

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

春季3自动装配和junit测试