Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

}
like image 514
Berlin Brown Avatar asked Nov 30 '15 14:11

Berlin Brown


1 Answers

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());
    }
}
like image 57
Mohit Avatar answered Oct 19 '22 06:10

Mohit