2015-11-30 23 views
9

Questo codice utilizza Spring 3.1 e junit4 e spring test 3.1. Voglio trasformare questo codice usando e caricando junit3.8.x. Ciò è dovuto a un sistema di generazione legacy. Come posso fare questo? La maggior parte della documentazione online per la primavera è incentrata sull'approccio in basso. Devo essere in grado di "caricare le classi primaverili". In questo caso ho un file XML, rest-servlet.xml e le classi 'services' sono annotate. Voglio essere in grado di caricare il file di configurazione della molla del servo e la molla di impostazione prima di ogni test.Come posso trasformare questo test junit4 'spring 3.1' orientato con SpringJUnit4ClassRunner in un test basato su junit3.8 basato sulla molla?

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:context="http://www.springframework.org/schema/context" 
     xmlns:mvc="http://www.springframework.org/schema/mvc" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans.xsd 
          http://www.springframework.org/schema/context 
          http://www.springframework.org/schema/context/spring-context.xsd 
          http://www.springframework.org/schema/mvc 
          http://www.springframework.org/schema/mvc/spring-mvc.xsd">   
     <context:component-scan base-package="com.ca.services.rest.*,com.ca.services.test.*" /> 
     <mvc:annotation-driven /> 
    </beans> 

TestActivityLog:

import org.junit.Assert; 
import org.junit.Before; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.beans.factory.annotation.Qualifier; 
import org.springframework.context.ApplicationContext; 
import org.springframework.test.context.ContextConfiguration; 
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; 

import com.ca.services.rest.activity.services.ActivityDaoRepository; 
import com.ca.services.rest.activity.services.ActivityService; 
import com.ca.services.rest.activity.services.impl.ActivityServiceImpl; 
import com.ca.services.test.mock.MockActivityDaoRepository; 

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations={"file:**/WEB-INF/rest-servlet.xml"}) 
public class TestActivityLog { 

    @Autowired 
    @Qualifier("mockActivityDaoRepository") 
    private MockActivityDaoRepository repository; 

    @Autowired 
    private ApplicationContext applicationContext; 

    @Autowired 
    public TestActivityLog() { 
     super(); 
    } 

    @Before 
    public void setup() throws Exception {  
    } 

    @Test 
    public void testOne() {  
     Assert.assertEquals("abc", "abc"); 
    }  

    public void testService2() { 
     final ActivityDaoRepository repo = repository; 
     final String chk1 = "[POL.ActivityAPI:as1.0.0]"; 
     final String chk2 = String.valueOf(repo.getVersion()); 
     Assert.assertEquals(chk1, chk2); 
    } 


    public void testService3() { 
     final ActivityService service = new ActivityServiceImpl(repository);   
    } 

} 

risposta

6

Ciò può essere ottenuto mediante la simulazione di SpringJUnitRunner. Questa classe carica il contesto dell'applicazione dalle posizioni di configurazione fornite (in classpath) e esegue l'autowiring dei campi nel caso di test.

Supponiamo di avere un bean controller (definito in bean.xml) che vogliamo testare.

public class Controller { 

    public String message() { 
     return "Hello"; 
    } 

} 

Test Case:

public class Spring38TestCase extends TestCase { 

    private Controller controller; 
    private ApplicationContext context; 

    @Override 
    protected void setUp() throws Exception { 
     //Initializing spring application context. 
     context = new ClassPathXmlApplicationContext("beans.xml"); 
     //Setting fields in test case explicitly in case of auto wiring 
     controller = context.getBean(Controller.class); 
    } 

    public void testController() { 
     assertEquals("Hello", controller.message()); 
    } 
} 
+0

Che funzionerà, stavo pensando che ci fosse qualche classe 3.8 in primavera. –

0

Per utilizzare JUnit 3.8 con la Primavera, è possibile utilizzare il seguente modello di scrivere i casi di test. (Vedi http://docs.spring.io/autorepo/docs/spring/3.0.x/reference/testing.html)

public class MyServiceTestCase 
     extends AbstractDependencyInjectionSpringContextTests { 

    private myService MyService; 

    @Test 
    public void testAddService() { 
     // a test case 
    } 

    /** 
    * The spring context configuration 
    */ 
    @Override 
    protected String[] getConfigLocations() { 
     return new String[] { "rest-servlet.xml" }; 
    } 
}