【发布时间】:2011-10-10 11:02:29
【问题描述】:
我目前正在测试我的应用程序的一部分(我们假设它是一个名为 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()?
【问题讨论】:
-
如果输出的是代码,你能测试一下生成的代码是否正确吗?
-
理论上是的,但实际上不是。为此,我将有很多其他方法未在此处列出。
-
您能解释一下为什么要测试这些东西吗?这个生成的代码不是在某处使用吗?如果你使用它,编译器会检查这些东西......
-
编译器不会检查代码的语义是否正确。
-
生成的代码将在其他地方使用,但在 waaaaaaaaaay 复杂的环境中。另外,我只会在几个月内完成整个项目,我不想等待它来测试它!
标签: java unit-testing testing