我目前正在测试应用程序的一部分(我们假设是一个名为X的类),该部分将反射java方法作为参数,并将基于它来打印一些Java代码(即它是一个代码生成器).例如,将String.toString()传递给X时,呈现的字符串输出将是:
public static java.lang.String toString(String thisObj, boolean isMonitoring) {
String thisObjOld = (String)thisObj.clone(thisObj, false);
if (isMonitoring) {
toStringPre(thisObj);
}
java.lang.String result = thisObj.toString_Original();
if (isMonitoring) {
toStringPost(thisObj, thisObjOld, result);
}
return result
}
现在,我想知道如何测试此输出.我想测试不同的东西(分别).
我知道最理想的做法是在印刷之前对抽象表示进行断言,而不要对最终文本进行断言.但不幸的是,似乎要进行太多的工作.
我要测试的示例包括:
>如果返回类型正确(java.lang.String);
>如果该方法的名称正确(toString)以及其参数`(String thisObj,boolean isMonitoring).
如何更好地解决这个问题?使用正则表达式?使用String.split()吗?
解决方法:
编译生成代码该如何处理-测试代码在语法上是否正确.
然后使用Reflection检查名称,参数和返回类型.
然后在模拟环境中运行它,以检查它是否应执行的操作.