usar unitarias tutorial test que pruebas para debe código cuál como colocarse automaticas anotación java unit-testing spring spring-mvc mockito

unitarias - test en java



Inyección de @Servicio simulado para pruebas unitarias de primavera. (3)

Estoy probando una clase que usa el uso de @Autowired para inyectar un servicio:

public class RuleIdValidator implements ConstraintValidator<ValidRuleId, String> { @Autowired private RuleStore ruleStore; // Some other methods }

Pero, ¿cómo puedo burlar a ruleStore durante las pruebas? No puedo averiguar cómo inyectar mi RuleStore simulado en Spring y en el sistema de cableado automático.

Gracias


Es bastante 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); } }

Lea más sobre @InjectMocks en el javadoc de Mockito o en una publicación del blog que escribí sobre el tema hace algún tiempo.

Disponible a partir de Mockito 1.8.3, mejorado en 1.9.0.


Puedes 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 tu Contexto de Primavera debería ser como:

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


Puedes usar algo como Mockito para burlarte de la regla devuelta durante las pruebas. Esta publicación de tiene un buen ejemplo de hacer esto:

Spring 3 autowiring y junit testing