Mi pregunta es muy similar a la cuestión planteada en Injecting Mockito mocks into a Spring bean. De hecho, creo que la respuesta aceptada podría funcionar para mí. Sin embargo, tengo un problema con la respuesta, y luego alguna explicación adicional en caso de que la respuesta no sea, de hecho, mi respuesta.inyección de prueba Spring + Mockito
Así que seguí el enlace en la publicación mencionada anteriormente al sitio web de Springockito. Alteré mi test-config.xml
incluir algo similar a lo siguiente:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:mockito="http://www.mockito.org/spring/mockito"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.mockito.org/spring/mockito http://www.mockito.org/spring/mockito.xsd">
...
<mockito:mock id="accountService" class="org.kubek2k.account.DefaultAccountService" />
...
</beans>
Parece que hay algo mal con el www.mockito.org
redirección actualmente, así que encontré el código XSD en https://bitbucket.org/kubek2k/springockito/raw/16143b32095b/src/main/resources/spring/mockito.xsd y una alteración de la entrada final en xsi: schemaLocation a punto a este enlace bitbucket.
Correr mvn test
entonces produjo el siguiente error (nuevas líneas añadidas para facilitar la lectura):
Caused by: org.springframework.beans.factory.xml.XmlBeanDefinitionStoreException:
Line 43 in XML document from class path resource [spring/test-context.xml] is invalid;
nested exception is org.xml.sax.SAXParseException; lineNumber: 43; columnNumber: 91;
The prefix "mockito" for element "mockito:mock" is not bound.
Así que la pregunta sobre Springockito es: ¿Es posible incluir más de esto? ¿Qué me estoy perdiendo?
Ahora, a la explicación más ...
que tienen una interfaz cuya aplicación que estoy tratando de prueba:
public interface MobileService {
public Login login(Login login);
public User getUser(String accessCode, Date birthDate);
}
La aplicación contiene un DAO que la primavera @Autowire
s en para mí :
@Service
public class MobileServiceImpl implements MobileService {
private MobileDao mobileDao;
@Autowired
public void setMobileDao(MobileDao mobileDao) {
this.mobileDao = mobileDao;
}
}
no quiero alterar mi interfaz para incluir un método setMobileDao
, debido a que el código sería la adición de sólo para mantener a mi unidad prueba. Estoy tratando de burlarme del DAO ya que el SUT real aquí es el ServiceImpl. ¿Cómo puedo conseguir esto?
@Mike Estoy de acuerdo, solo prueba la implementación. No tiene sentido tener un contexto de primavera para una prueba de ** unidad **. Y, por cierto, Mockito ofrece un mecanismo de inyección de dependencia trivial con una combinación de anotaciones '@ Mock' y' @ InjectMocks'. Debería ver sus respectivos [javadoc] (http://docs.mockito.googlecode.com/hg/latest/org/mockito/Mockito.html). – Brice