package com.github.zhangkaitao.dbtest;
import org.junit.Assert;
import org.junit.FixMethodOrder;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.MethodSorters;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.test.annotation.DirtiesContext;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.jdbc.Sql;
import org.springframework.test.context.jdbc.SqlConfig;
import org.springframework.test.context.jdbc.SqlGroup;
import org.springframework.test.context.junit4.AbstractTransactionalJUnit4SpringContextTests;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.transaction.annotation.Transactional;
import javax.sql.DataSource;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;
import static java.lang.annotation.ElementType.METHOD;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.CLASS;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
/**
* User: zhangkaitao
* Date: 14-8-4
* Time: ����8:57
* Version: 1.0
*/
@RunWith(SpringJUnit4ClassRunner.class)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
@ContextConfiguration(value = "classpath:spring-datasource.xml")
@Transactional()
@CompositeSqlGroup()
//@SqlGroup(
// {
// @Sql(value = {"classpath:schema.sql", "classpath:init-data.sql", "classpath:updated-data.sql"},
// config =
// @SqlConfig(encoding = "utf-8", separator = ";", commentPrefix = "--",
// dataSource = "dataSource1", transactionManager = "txManager1")),
// @Sql(value = {"classpath:schema.sql", "classpath:init-data.sql"},
// config =
// @SqlConfig(encoding = "utf-8", separator = ";", commentPrefix = "--",
// dataSource = "dataSource2", transactionManager = "txManager2"))
// }
//)
@DirtiesContext(classMode = DirtiesContext.ClassMode.AFTER_EACH_TEST_METHOD)
public class ClassLevelSqlGroupTest {
private JdbcTemplate jdbcTemplate1;
private JdbcTemplate jdbcTemplate2;
@Autowired
@Qualifier("dataSource1")
public void setDataSource1(DataSource dataSource1) {
this.jdbcTemplate1 = new JdbcTemplate(dataSource1);
}
@Autowired
@Qualifier("dataSource2")
public void setDataSource2(DataSource dataSource2) {
this.jdbcTemplate2 = new JdbcTemplate(dataSource2);
}
@Test
@Transactional()
@Sql(value = {"classpath:schema.sql", "classpath:init-data.sql", "classpath:updated-data.sql"},
config =
@SqlConfig(encoding = "utf-8", separator = ";", commentPrefix = "--",
dataSource = "dataSource1", transactionManager = "txManager1"))
public void test01_simple() {
Assert.assertEquals(
Integer.valueOf(3),
jdbcTemplate1.queryForObject("select count(1) from users", Integer.class));
}
@Test
@Transactional()
@Sql(value = {"classpath:schema.sql", "classpath:init-data.sql"},
config =
@SqlConfig(encoding = "utf-8", separator = ";", commentPrefix = "--",
dataSource = "dataSource2", transactionManager = "txManager2"))
public void test02_simple() {
Assert.assertEquals(
Integer.valueOf(2),
jdbcTemplate2.queryForObject("select count(1) from users", Integer.class));
}
}
@SqlGroup(
{
@Sql(value = {"classpath:schema.sql", "classpath:init-data.sql", "classpath:updated-data.sql"},
config =
@SqlConfig(encoding = "utf-8", separator = ";", commentPrefix = "--",
dataSource = "dataSource1", transactionManager = "txManager1")),
@Sql(value = {"classpath:schema.sql", "classpath:init-data.sql"},
config =
@SqlConfig(encoding = "utf-8", separator = ";", commentPrefix = "--",
dataSource = "dataSource2", transactionManager = "txManager2"))
}
)
@Retention(RUNTIME)
@Target(TYPE)
@interface CompositeSqlGroup {
}