19

use@Autowiredを使用してサービスを注入するクラスをテストしています。

public class RuleIdValidator implements ConstraintValidator<ValidRuleId, String> {

    @Autowired
    private RuleStore ruleStore;

    // Some other methods
}

しかし、テスト中にruleStoreをモックするにはどうすればよいですか?模擬のRuleStoreをSpringと自動配線システムに挿入する方法がわかりません。

ありがとう

4

3 に答える 3

19

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の詳細については、Mockitojavadocまたは以前にこのトピックについて書いたブログ投稿を参照してください。

Mockito 1.8.3以降で利用可能で、1.9.0で拡張されています。

于 2012-11-28T22:41:34.547 に答える
10

Mockitoのようなものを使用して、テスト中に返されたルールストアをモックすることができます。このStackoverflowの投稿には、これを行う良い例があります。

春の3自動配線とjunitテスト

于 2011-01-07T09:33:50.687 に答える
2

次のことができます。

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
}

そして、SpringContextは次のようになります。

<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>
于 2013-03-21T14:43:38.530 に答える