Spark菜鸟学习营Day4
单元测试程序的编写
Spark相比于传统代码是比较难以调试的,单元测试的编写是非常必要的。
Step0:需求分析
在测试案例编写前,需完成需求分析工作,明确程序所有的输入和输出情况。
具体请见需求分析章节。
Step1:新建测试案例
测试案例统一放置在如下位置:
compute-->src-->test-->java-->com.icbc.aas.darts.compute-->split.processor
![2016-07-26 16-56-36](http://o6jujlzry.bkt.clouddn.com/2016-09-03-2016-07-26 16-56-36.jpg)
选择New-->Java Class,在窗口中,输入测试代码名称,Kind选择ProcessorTest
![2016-07-26 16-58-02](http://o6jujlzry.bkt.clouddn.com/2016-09-03-2016-07-26 16-58-02.jpg)
如果无法选到ProcessorTest,请在Settings-->File and Code Template,右上角选择Project
![2016-07-26 17-01-00](http://o6jujlzry.bkt.clouddn.com/2016-09-03-2016-07-26 17-01-00.jpg)
在生成的测试案例代码中,首先完善addParams方法。
![2016-07-26 17-02-22](http://o6jujlzry.bkt.clouddn.com/2016-09-03-2016-07-26 17-02-22.jpg)
Step2:输入数据准备
针对每个输入数据,循环以下步骤:
Step2.1:pojo(Java数据结构)建立
运行PojoMaker工具
![2016-07-26 17-03-48](http://o6jujlzry.bkt.clouddn.com/2016-09-03-2016-07-26 17-03-48.jpg)
根据提示,完成pojo的建立
![2016-07-26 17-04-49](http://o6jujlzry.bkt.clouddn.com/2016-09-03-2016-07-26 17-04-49.jpg)
Step2.2:数据文件建立
运行DataPrepareUtil工具。
![2016-07-26 17-05-38](http://o6jujlzry.bkt.clouddn.com/2016-09-03-2016-07-26 17-05-38.jpg)
根据提示,从Oracle取数生成数据文件。
其中,suffix为文件名后缀,用于防止文件互相冲突,建议与代码编号一致。
![2016-07-26 17-06-30](http://o6jujlzry.bkt.clouddn.com/2016-09-03-2016-07-26 17-06-30.jpg)
文件保存在如下路径中
![2016-07-26 17-09-45](http://o6jujlzry.bkt.clouddn.com/2016-09-03-2016-07-26 17-09-45.jpg)
Step2.3:执行数据准备
在prepareData方法中,调用API,执行数据准备。
@Override
public void prepareData(ComputeBatchNode cbn, JavaSparkContext sc, Hashtable params, ComputeResult result) {
//Dateframe:qtsl_temp
mockSparkTempTable("QTSL_TEMP", "_600", cbn);
//Dataframe:par_fund_partner
mockSparkTempTable("PAR_FUND_PARTNER", "_600", cbn);
//Oracle表:out_trd_qtsl_his
mockMybatisTempTable("splitSqlMapper.getQtslHis", "OUT_TRD_QTSL_HIS_600");
//RDD:qtsl_temp
mockSparkRDD("QTSL_TEMP", "_600", cbn, QtslTempPojo.class);
//RDD:par_fund_fill_partner
mockSparkRDD("PAR_SYS_FILL_PARTNER", "_600", cbn, ParSysFillPartnerPojo.class);
doPrepareData(cbn, params);
}