簡體   English   中英

為Spring單元測試注入模擬@Service

[英]Injecting mock @Service for Spring unit tests

我正在測試一個使用@Autowired注入服務的類:

public class RuleIdValidator implements ConstraintValidator<ValidRuleId, String> {

    @Autowired
    private RuleStore ruleStore;

    // Some other methods
}

但是如何在測試期間模擬ruleStore? 我無法弄清楚如何將我的模擬RuleStore注入Spring並進入自動布線系統。

謝謝

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中的javadoc的Mockito或在博客中 ,我前段時間寫的話題。

自Mockito 1.8.3起可用,增強型1.9.0。

您可以使用Mockito之類的東西來模擬測試期間返回的規則庫。 這篇Stackoverflow帖子有一個很好的例子:

春季3自動裝配和junit測試

你可以這樣做:

package com.mycompany;    

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.DependsOn;
import org.springframework.stereotype.Component;

@Component
@DependsOn("ruleStore")
public class RuleIdValidator implements ConstraintValidator<ValidRuleId, String> {

    @Autowired
    private RuleStore ruleStore;

    // Some other methods
}

你的Spring Context應該是這樣的:

<context:component-scan base-package="com.mycompany" />

<bean id="ruleStore" class="org.easymock.EasyMock" factory-method="createMock">
    <constructor-arg index="0" value="com.mycompany.RuleStore"/>
</bean>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM