【发布时间】:2011-05-05 08:43:26
【问题描述】:
是否有一个好的工具可以根据一些原始模板自动生成 jUnit 测试用例?这样一来,测试用例就可以由没有太多 Java 或 jUnit 背景的工程师编写。作为背景信息,这是用于黑盒测试。如果除了使用 jUnit 之外还有其他方法可以运行回归测试,我也很高兴听到它。
谢谢
【问题讨论】:
标签: java unit-testing testing junit
是否有一个好的工具可以根据一些原始模板自动生成 jUnit 测试用例?这样一来,测试用例就可以由没有太多 Java 或 jUnit 背景的工程师编写。作为背景信息,这是用于黑盒测试。如果除了使用 jUnit 之外还有其他方法可以运行回归测试,我也很高兴听到它。
谢谢
【问题讨论】:
标签: java unit-testing testing junit
这是一个典型的工具: http://mediakey.dk/~cc/generate-junit-tests/
TestGen4J 是一组自动生成单元测试用例的开源工具。 TestGen4J 自动从您自己的 Java 类文件或源文件生成 JUnit 测试用例。它的主要重点是对传递给方法的参数进行边界值测试。它使用写在用户可配置 XML 文件中的规则来定义数据类型的边界条件。借助 JTestCase 将测试代码与测试数据分离。
测试代码以分层方式生成。生成一个主测试套件,它调用各个类的测试套件。单个类的测试套件是由该类的测试方法的集合形成的。
测试数据也是分层组织的,对应于测试代码的结构,采用 XML 格式。这个 XML 文件实际上包含每个方法的所有单元测试用例的数据。 JTestCase 有助于循环每个方法的所有测试用例并执行一个
对 JUnit。
【讨论】:
Parasoft 的 JTest 是一个商业工具,但它非常适合:
如需免费解决方案,您可以尝试CodePro Analytix Eclipse 插件的 JUnit 生成功能。
【讨论】:
另一种选择可能是创建一种对工程师来说有意义的更高级别的领域特定语言,以便他们编写测试代码。Groovy 是一种简单的方法(谷歌 groovy 和 DSL),或者在另一端频谱使用JavaCC。
【讨论】:
用 Java 生成测试用例的示例代码:
import java.util.ArrayList;
import java.util.List;
public class JunitGenerator {
public static List<String> s = new ArrayList();
static String clname="employee";
static String clBigname="Employee";
public static void main(String[] args) {
s.add("String;name;Name");
s.add("int;age;Age");
s.add("Boolean;isAge;IsAge");
s.add("Double;amount;Amount");
System.out.println("import static org.junit.Assert.*;");
System.out.println("import static org.junit.Assert.assertEquals;");
System.out.println("import org.junit.Test;");
System.out.println();
System.out.println("public class "+clBigname+"Test{");
System.out.println(""+clBigname+" "+clname+"=new "+clBigname+"();");
for(String s1:s) {
String[] a=s1.split(";");
System.out.println("@Test");
System.out.println("public void get"+a[2]+"Test(){");
if(a[0].equalsIgnoreCase("int"))
System.out.println(a[0]+" "+a[1]+" =0"+";");
if(a[0].equalsIgnoreCase("String"))
System.out.println(a[0]+" "+a[1]+" =null"+";");
if(a[0].equalsIgnoreCase("Double"))
System.out.println(a[0]+" "+a[1]+" =0.0"+";");
if(a[0].equalsIgnoreCase("Boolean"))
System.out.println(a[0]+" "+a[1]+" =false"+";");
System.out.println(""+ clname +".set"+a[2]+"("+a[1]+");");
if(!a[0].equalsIgnoreCase("String"))
System.out.println("assertNotNull("+ clname +".get"+a[2]+"());");
if(a[0].equalsIgnoreCase("String"))
System.out.println("assertEquals("+a[1]+","+ clname +".get"+a[2]+"());");
System.out.println("}");
}
System.out.println("}");
}
}
【讨论】: