如何设置存储过程调用参数的默认值?
代码生成时会为各种类型的参数初始化一个对应的默认值,这样可以保证生成的测试代码是可以立即运行的,默认值列表如下:
在代码生成之后,程序员需要把这些默认的值修改为一些具体的测试用例的值。
如何调用执行存储过程?
在已经生成的测试代码中,如何运行存储过程也是一个问题。将大批的数据库操作写在测试代码中是不合适的,真正对测试有用的代码可能会被淹没在这些大量的辅助代码之中,而造成代码的混乱和维护困难。因此我们封装了一个类,用它专门来运行存储过程,这个类叫做 SPProcessSample,它提供了以下主要方法有:
其中的 StoredProcedureInfo 是记录存储过程信息的类,包括存储过程名、存储过程参数列表等。因此,只需要首先创建存储过程信息,然后调用 runSP 方法即可运行存储过程。而这部分代码也是由系统自动生成的,程序员真正需要做的就是修改调用参数的值。
如何定制测试用例?
可以假设有这样一种场景,即程序员需要在所有生成的代码中增加一个新的逻辑,或者增加一条公共的 Assert 语句,这时可能需要修改所有已经生成的代码,无异于一场噩梦。为了使程序员能够统一控制生成的代码,必须让他能够干预代码生成的逻辑,这样就可以保证代码生成功能的灵活性和扩展性。
我们采取的办法是提供一个用户可以修改的代码模板,这个模板是一个 .txt的文本文件。系统生成代码时,会根据这个模板文件来生成新的代码。除了其中的保留字之外,用户可以更改代码的任何部分。并且用户可以根据此模板制作若干针对不同测试目的的模板,以便生成各自的测试代码。例如对于一个只需要进行存储过程性能的测试代码而言,只要能统计出存储过程的运行时间即可,但是对只需要验证存储过程正确性的测试代码而言,就可以把这些时间统计功能的代码去掉。方法就是针对这两种应用,制作两个模板文件,分别使用这两个文件生成代码即可。
下面就是代码模板中用于生成其他测试用例的示例代码,这段代码起到示范作用,所有测试例将按照此代码样式生成。用户只需要修改这段代码,就可以统一定制代码的格式和内容:
final public void do*ROUTINESCHEMA*_*ROUTINENAME*() {
SPTestResult result = new SPTestResult();
long currentTestStartTime = System.currentTimeMillis();
result.setNames(
"*CLASS_NAME*",
"do*ROUTINESCHEMA*_*ROUTINENAME*",
"*ROUTINESCHEMA*.*ROUTINENAME*");
int rows = 0;
StoredProcedureInfo spInfo = new StoredProcedureInfo("*ROUTINETYPE*");
spInfo.setRoutineSchema("*ROUTINESCHEMA*");
spInfo.setRoutineName("*ROUTINENAME*");
spInfo.setRowsReturnedParmId(11);
//TODO If this procedure has a parameter returning the rows of the result set, please
//change the parm_id to the real id, int value is needed.
//spInfo.setRowsReturnedParmId(parm_id);
ArrayList parms=new ArrayList();
//TODO Please modify the last parameter of the 'new ParmInfo()'
// function to set the proper parameters.
*PARAMETERS_LIST*
spInfo.setParmList(parms);
try {
rows = spProcess.runSP(spInfo);
result.setDurationTime(spProcess.getDurationTime());
result.setMemo(spInfo.getParmString());
result.setRowsReturned(rows);
testResultList.add(result);
} catch (Exception e) {
System.err.println(e.getMessage());
result.setMemo(e.getMessage());
}
}