当前位置: 代码迷 >> SQL >> Spring单元测试,SQL数据预备
  详细解决方案

Spring单元测试,SQL数据预备

热度:29   发布时间:2016-05-05 13:30:53.0
Spring单元测试,SQL数据准备

在测试中,一般的数据库数据Mock是不可少的。在前文的基础上,我们写读取脚本把数据写入数据库的工具类。

package com.jje.travel.provider;import com.jje.travel.InitTestEnvironment;import org.junit.After;import org.junit.Before;import org.junit.runner.RunWith;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.jdbc.core.simple.SimpleJdbcTemplate;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import javax.sql.DataSource;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;import java.text.SimpleDateFormat;import java.util.Date;import java.util.HashMap;@RunWith(SpringJUnit4ClassRunner.class)@ContextConfiguration(locations = {"classpath:testApplicationContext.xml"})public class SqlDataPrepareUtil {    @Autowired    DataSource dataSource;    SimpleJdbcTemplate template;    private final Logger logger = LoggerFactory.getLogger(SqlDataPrepareUtil.class);    @Before    public void setUp() throws IOException {        template = new SimpleJdbcTemplate(dataSource);        String content = sqlForThisTest();        if (content.equals("")) {            return;        }        String[] sqlLines = content.split(";");        for (int i = 0; i < sqlLines.length; i++) {            String sql = sqlLines[i];            if (0 == sql.trim().length()) {                continue;            }            template.update(sql);            if (logger.isDebugEnabled()) {                logger.debug(sql);            }        }    }    private String sqlForThisTest() throws IOException {        String sqlName = getClass().getSimpleName() + ".sql";        InputStream stream = getClass().getResourceAsStream(sqlName);        if (stream == null) {            return "";        }        BufferedReader reader = new BufferedReader(                new InputStreamReader(stream, "UTF-8"));        StringBuilder buffer = new StringBuilder();        try {            String line = null;            while ((line = reader.readLine()) != null) {                buffer.append(line);            }        } finally {            reader.close();        }        return buffer.toString();    }}
脚本存放的地方和测试类包名路径一致,测试类的写法如下:
package com.jje.travel.provider;import com.jje.common.utils.JaxbUtils;import com.jje.common.utils.VirtualDispatcherService;import com.jje.dto.travel.line.LineDto;import com.jje.travel.esb.dto.EnvelopeDto;import com.jje.travel.esb.facade.LineEsb;import com.jje.travel.journey.domain.Journey;import com.jje.travel.line.domain.Line;import com.jje.travel.reservation.JourneyMaker;import com.jje.travel.reservation.LineMaker;import org.jboss.resteasy.mock.MockHttpRequest;import org.jboss.resteasy.mock.MockHttpResponse;import org.junit.Assert;import org.junit.Ignore;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import org.springframework.test.annotation.Rollback;import org.springframework.test.context.ContextConfiguration;import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;import org.springframework.transaction.annotation.Transactional;import javax.ws.rs.core.MediaType;import javax.ws.rs.core.Response.Status;import java.io.UnsupportedEncodingException;import java.net.URISyntaxException;import java.util.ArrayList;import java.util.List;import static com.natpryce.makeiteasy.MakeItEasy.*;@Componentpublic class LineSyncTest extends SqlDataPrepareUtil{	@Test    @Rollback(true)    public void should_return_XXX_when_given_xx(){    }}


  相关解决方案