Spring單元測試,SQL數據準備
工具類代碼
在測試中,一般的數據庫數據Mock是不可少的。在前文的基礎上,我們寫讀取腳本把數據寫入數據庫的工具類。
//www.heatpress123.net[java] view plaincopy
- 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();
- }
- }
腳本存放的地方和測試類包名路徑一致,測試類的寫法如下:
[java] view plaincopy
- 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.*;
- @Component
- public class LineSyncTest extends SqlDataPrepareUtil{
- @Test
- @Rollback(true)
- public void should_return_XXX_when_given_xx(){
- }
- }