unitarias una tutorial test software será qué que pruebas prueba método indica automaticas anotación java spring junit

una - testing en java



El resorte no se enciende automáticamente en las pruebas unitarias con JUnit (4)

Agrega algo como esto a tu clase de prueba de unidad raíz:

@RunWith( SpringJUnit4ClassRunner.class ) @ContextConfiguration

Esto usará el XML en su ruta predeterminada. Si necesita especificar una ruta no predeterminada, puede proporcionar una propiedad de ubicación a la anotación ContextConfiguration.

http://static.springsource.org/spring/docs/2.5.6/reference/testing.html

Pruebo el siguiente DAO con JUnit:

@Repository public class MyDao { @Autowired private SessionFactory sessionFactory; // Other stuff here }

Como puede ver, sessionFactory se conecta automáticamente con Spring. Cuando ejecuto la prueba, sessionFactory permanece nulo y obtengo una excepción de puntero nulo.

Esta es la configuración de sessionFactory en Spring:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource" ref="dataSource" /> <property name="configLocation"> <value>classpath:hibernate.cfg.xml</value> </property> <property name="configurationClass"> <value>org.hibernate.cfg.AnnotationConfiguration</value> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${jdbc.dialect}</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean>

Que pasa ¿Cómo puedo habilitar el cableado automático para las pruebas unitarias también?

Actualización: no sé si es la única forma de ejecutar pruebas JUnit, pero tenga en cuenta que lo estoy ejecutando en Eclipse haciendo clic derecho en el archivo de prueba y seleccionando "ejecutar como" -> "Prueba JUnit"


Debe usar el corredor Spring JUnit para conectar los beans Spring desde su contexto. El código a continuación asume que tiene un contexto de aplicación llamado testContest.xml disponible en la ruta de testContest.xml de prueba.

import org.hibernate.SessionFactory; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.transaction.annotation.Transactional; import java.sql.SQLException; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.startsWith; @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"classpath*:**/testContext.xml"}) @Transactional public class someDaoTest { @Autowired protected SessionFactory sessionFactory; @Test public void testDBSourceIsCorrect() throws SQLException { String databaseProductName = sessionFactory.getCurrentSession() .connection() .getMetaData() .getDatabaseProductName(); assertThat("Test container is pointing at the wrong DB.", databaseProductName, startsWith("HSQL")); } }

Nota: Esto funciona con Spring 2.5.2 y Hibernate 3.6.5.


Falta la ubicación del archivo de contexto en la configuración puede causar esto, un enfoque para resolver esto:

  • Especificando la ubicación del archivo de contexto en ContextConfiguration

me gusta:

@ContextConfiguration(locations = { "classpath:META-INF/your-spring-context.xml" })

Más detalles

@RunWith( SpringJUnit4ClassRunner.class ) @ContextConfiguration(locations = { "classpath:META-INF/your-spring-context.xml" }) public class UserServiceTest extends AbstractJUnit4SpringContextTests {}

Referencia: Gracias a @Xstian


Necesitas agregar anotaciones a la clase Junit, diciéndole que use SpringJunitRunner. Los que quieres son:

@ContextConfiguration("/test-context.xml") @RunWith(SpringJUnit4ClassRunner.class)

Esto le dice a Junit que use el archivo test-context.xml en el mismo directorio que su prueba. Este archivo debería ser similar al contexto.xml real que está usando para Spring, pero apuntando a los recursos de prueba, naturalmente.