简体   繁体   中英

How can I turn this 'spring 3.1' oriented junit4 test with SpringJUnit4ClassRunner into a spring oriented junit3.8 based test?

This code uses Spring 3.1 and junit4 and spring-test 3.1. I want to turn this code using and loading junit3.8.x. This is due to a legacy build system. How can I do this? Most of the online documentation for spring is centered around the approach below. I need to be able to 'load the spring classes'. In this case I have a XML file, rest-servlet.xml and the 'services' classes are annotated. I want to be able to load that rest-servlet spring configuration file and setup spring before each test.

<?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);        
    }  

}

This can be achieved by simulating SpringJUnitRunner . This class loads the application context from the provided config locations (in classpath) and autowiring the fields in test case.

Suppose we have a controller bean (defined in beans.xml) which we want to test.

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());
    }
}

For using JUnit 3.8 with Spring, can use the following template to write the test cases. (See 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" };
    }
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM