单元测试备忘
2017-09-23 本文已影响0人
dongweima
选了很久的技术栈,最后选了groovy+spock+junit为核心的方案
原因是:
groovy作为脚本语言,和java很好并存,使用起来有比较方便
spock 他的语法使得测试更易于理解易于维护
junit 作为老的测试框架 还是很不错的
公司的核心框架是springboot 因此也做了点整合
简单的为自己封装了一个自己使用的测试工具包,把一些重复的事情处理掉
主要实现了
如何简化初始化mysql和hbase hbase,mysql操作封装简化
mysql使用了h2
hbase使用了hbase mini集群
mysql初始化支持读sql文件和自定义的data文件
hbase支持读取data文件 并自动创建相关表
data文件规则:
- 文件名即表名
- 具体内容
hbase
第二行是 列和列簇的定义 语法: 列簇1(列1, 列2..) ..
第三行 数据定义 语法: rowkey |列1 |列2 ...
hbase
base(ptRule,family,quality) org(schoolId,structId)
role:1 |every_day |count | every_day_uv| 1| schoolId1| structId1|
role:2 |every_day |count | every_day_uv| 1| schoolId1| structId2|
1 |every_day |count | every_day_uv| 1| schoolId1| structId3|
2 |every_day |count | every_day_uv| 1| schoolId1| structId4|
mysql
第二行是 列定义 语法: 列1, 列2....
第三行 数据定义 列1 |列2 ...
mysql
id,name
1 |every_day
2 |every_day
自动读取data目录下的mysql相关的数据文件和sql文件
sql文件优先于数据文件
hbase不会自动读取,只会在第一次启动hbase mini集群的时候自动读取
因为很多时候测试,并不需要启动hbase mini集群 并且集群启动要几十秒 浪味时间
mhysql和hbase只会初始化一次 多次调用没用
使用方式
H2Config.getH2Datasource()
H2Config.getSql()
HbaseConfig.start()
HbaseTestUtil.simpleScan("","","")
//还有其他封装方法HbaseTestUtil.XXX() MysqlTestUtil.XXX()
@Configuration
@Profile("test")
class TestConfig {
@Bean(name = "quotaDataSource")
@Qualifier("quotaDataSource")
@Primary
DataSource tagDataSource() {
return H2Config.getH2Datasource()
}
@Bean
DataInitScript dataInitScript(){
//hbase的启动太慢 还是手动启动吧
DataInitScript dataInitScript = new DataInitScript()
dataInitScript.initAll true
return dataInitScript
}
}
spingboot 整合
@WebAppConfiguration
@ContextConfiguration(classes = [App.class], loader = SpringBootContextLoader.class)
class QuotaConditionDaoImplTest extends Specification {
def setupSpec() {}
def setup() {}
def "test demo"(){
given:
A a = new A()
when:
String result = a.doMethod()
then:
result.equal(data)
//expect:
cleanup:
//clean
where:
data |_
"data" |_
"data2" |_
}
}
@SpringBootApplication
@ComponentScan(["com.XXX.core","com.dongweima.data.unit.test"])
class App extends SpringBootServletInitializer {
static void main(String[] args) {
run(App.class, args)
}
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
return application.sources(App.class)
}
}
maven 发布在阿里云maven上
<dependency>
<groupId>com.dongweima.test</groupId>
<artifactId>test-util</artifactId>
<version>${test-util.version}</version>
<scope>test</scope>
</dependency>