Pregunta

Estoy probando una clase que usan usos @Autowired para inyectar un servicio:

public class RuleIdValidator implements ConstraintValidator<ValidRuleId, String> {

    @Autowired
    private RuleStore ruleStore;

    // Some other methods
}

Pero cómo puedo ruleStore simulada durante la prueba? No puedo encontrar la manera de inyectar mi RuleStore simulacro en la primavera y en el sistema de auto-cableado.

Gracias

¿Fue útil?

Solución

Es muy fácil con 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);
    }
}

Más información sobre el @InjectMocks en el javadoc Mockito o en un href="http://www.jayway.com/2012/02/25/mockito-and-dependency-injection/" rel="nofollow noreferrer"> blog que escribí sobre el tema hace algún tiempo.

Disponible a partir del Mockito 1.8.3, 1.9.0 mejorado en.

Otros consejos

Se puede hacer lo siguiente:

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
}

Y su Contexto resorte debe el siguiente aspecto:

<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>
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top