2011-01-07 5 views
13

परीक्षण मैं एक सेवा इंजेक्षन करने के लिए एक वर्ग @Autowired का उपयोग का उपयोग करता है परीक्षण कर रहा हूँ:वसंत इकाई के लिए नकली @Service इंजेक्शन

public class RuleIdValidator implements ConstraintValidator<ValidRuleId, String> { 

    @Autowired 
    private RuleStore ruleStore; 

    // Some other methods 
} 

लेकिन यह कैसे मैं परीक्षण के दौरान ruleStore नकली कर सकते हैं? मैं समझ नहीं सकता कि कैसे मेरे नकली रूलेस्टोर को वसंत में और ऑटो-वायरिंग सिस्टम में इंजेक्ट करना है।

धन्यवाद

उत्तर

12

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 जावाडोक में या एक blog post है कि मैं के बारे में लिखा में अधिक @InjectMocks के बारे में पढ़ें यह Stackoverflow पद ऐसा करने का एक अच्छा उदाहरण है कुछ समय पहले विषय।

मॉकिटो 1.8.3 के रूप में उपलब्ध, 1.9.0 में बढ़ाया गया।

10

आप rulestore उपहास करने के लिए Mockito की तरह कुछ का उपयोग कर सकते परीक्षण के दौरान लौट आए।

spring 3 autowiring and junit testing

+0

धन्यवाद, मुझे लगता है कि एक याद किया। ReflectionTestUtils.setField (सत्यापनकर्ता, "नियमस्टोर", नियमस्टोर); – Steve

+0

हाँ, मॉकिटो अच्छा है। यह उपयोग करना आसान और आसान है। – chris

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 
} 

और अपने स्प्रिंग प्रसंग चाहिए की तरह दिखता है:

<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>