2012-09-14 15 views
5

Estoy intentando configurar Junit Test Suite con Spring por primera vez y lo intenté con un par de cambios en mis clases, pero no tuve suerte y terminé con este error: "junit.framework.AssertionFailedError: No las pruebas se encuentran en Myclass"SpringJUnit4ClassRunner con JUnit testuite error

brevemente, tengo clases 2 de prueba tanto son de misma clase base que carga contexto del resorte como abajo

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = 
{ 
"classpath:ApplicationContext.xml" 
}) 

he intentado añadir esas 2 clases de prueba en una suite, ya continuación

@RunWith(SpringJUnit4ClassRunner.class) 
@SuiteClasses({ OneTest.class, TwoTest.class }) 
public class MyTestSuite extends TestCase { 

//nothing here 
} 

Estoy ejecutando este conjunto de pruebas de hormiga. Pero esto me da un error que dice "No se encontraron pruebas" Sin embargo, si ejecuto los 2 casos de prueba individuales de hormiga, funcionan correctamente. No estoy seguro de por qué es este comportamiento, estoy seguro de que me falta algo aquí. Por favor aconséjame.

+0

¿Desea intentar con la anotación '@ Test' (que es cómo se califican los métodos de prueba desde Junit 4) en lugar de extender' TestCase' (que era anterior a Junit 4)? – Vikdor

+0

Vikdor, anoté @Test para todos mis métodos de prueba en esas clases. Esta clase de TestCase I se extendió para la suite. – San

+0

Lo siento, no me di cuenta de que quería que MyTestSuite fuera una Suite. Use '@RunWith (Suite.class)' para ejecutar el conjunto de pruebas. El '@RunWith (SpringJunit4ClassRunner.class)' es necesario en los casos de prueba donde se necesita inyectar beans. – Vikdor

Respuesta

7

Como se menciona en los comentarios, ejecutamos TestSuite con @RunWith(Suite.class) y enumeramos todos los casos de prueba con @SuiteClasses({}). Para no repetir el @RunWith(SpringJunit4ClassRunner.class) y el @ContextConfiguration(locations = {classpath:META-INF/spring.xml}) en cada caso de prueba, creamos un AbstractTestCase con estas anotaciones definidas en él y ampliamos esta clase abstracta para todos los casos de prueba. Una muestra se puede encontrar a continuación:

/** 
* An abstract test case with spring runner configuration, used by all test cases. 
*/ 
@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = 
{ "classpath:META-INF/spring.xml" }) 
public abstract class AbstractSampleTestCase 
{ 
} 


public class SampleTestOne extends AbstractSampleTestCase 
{ 
    @Resource 
    private SampleInterface sampleInterface; 

    @Test 
    public void test() 
    { 
     assertNotNull(sampleInterface); 
    } 

} 


public class SampleTestTwo extends AbstractSampleTestCase 
{ 
    @Resource 
    private SampleInterface sampleInterface; 

    @Test 
    public void test() 
    { 
     assertNotNull(sampleInterface); 
    } 

} 


@RunWith(Suite.class) 
@SuiteClasses(
{ SampleTestOne.class, SampleTestTwo.class }) 
public class SampleTestSuite 
{ 
} 

Si no desea tener una AbstractSampleTest, entonces es necesario repetir las anotaciones corredor resorte en cada caso de prueba, hasta la primavera se le ocurre una SpringJunitSuiteRunner similar a la forma en que necesita agregar un SpringJunitParameterizedRunner.

+0

que era lo mismo que hice inicialmente, mencioné lo mismo en mi primer bloque de código que es para la clase base. Lo único que me falta es abstracto para la clase base, que ahora agregué. Pero, sigue viendo el error a continuación. "java.lang.NoClassDefFoundError: junit/framework/Test" esto es algo relacionado con classpath. Pero mi classpath de la tarea junit muestra el jar junit 4.8. ¿Me estoy perdiendo algo o mi classpath está equivocado? – San

+0

La anotación 'Test' debe resolverse a' org.junit.Test'. No estoy seguro de por qué es 'junit.framework.Test' en su caso. ¿Puedes cambiar la importación en consecuencia? – Vikdor

Cuestiones relacionadas