Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用代码生成来执行泛型测试_Java_Testing_Code Generation - Fatal编程技术网

Java 使用代码生成来执行泛型测试

Java 使用代码生成来执行泛型测试,java,testing,code-generation,Java,Testing,Code Generation,我想我有一个有趣的问题,也许已经有了答案,这对我来说仍然是个秘密,所以我希望能从专家那里得到一些帮助 这就是问题所在: 我为测试/验证团队工作以测试我们的JavaAPI,基本上我的工作是遵循测试计划并编写测试代码。在写了两个多月之后,我发现代码非常相似。例如: 为了测试函数是否能够正确返回预期结果或抛出异常,我们可能需要编写几个.java来运行 1.java设置服务器连接,连接客户端并发送请求,启动具有正确值的变量并将其传递给函数A,获取答案并进行分析 2.java设置服务器连接,连接客户端并发

我想我有一个有趣的问题,也许已经有了答案,这对我来说仍然是个秘密,所以我希望能从专家那里得到一些帮助

这就是问题所在:

我为测试/验证团队工作以测试我们的JavaAPI,基本上我的工作是遵循测试计划并编写测试代码。在写了两个多月之后,我发现代码非常相似。例如:

为了测试函数是否能够正确返回预期结果或抛出异常,我们可能需要编写几个.java来运行

1.java设置服务器连接,连接客户端并发送请求,启动具有正确值的变量并将其传递给函数A,获取答案并进行分析

2.java设置服务器连接,连接客户端并发送请求,启动所有值正确但值不正确的变量,并将其传递给函数A,获取答案并进行分析

3.java设置服务器连接,连接客户端并发送请求,使用正确的值启动所有变量,但使用错误的值启动两个变量,并将它们传递给函数A,获取答案并对其进行分析

因此,您可以在三个java测试文件中看到,它们的大部分都是相同或相似的,甚至复制/粘贴都会使工作变得枯燥,并且可能出错

我想知道是否可以定义对应不同行为的测试代码,然后对于每个测试java文件,我定义一个包含行为的文本,然后定义一个负责加载文本文件并根据文本文件组装最终测试java文件的母类

像这样: 文本文件: 1设置服务器 2连接客户端 3发送请求 4用正确的值初始化变量 5使用正确值启动变量,但使用错误值启动变量 6使用正确值启动变量,但使用错误值启动两个变量 7捕捉结果并进行分析

Mother.java 1加载文本文件 2创建一个son.java 3找到文本文件对应的代码并将其写入son.java

然后,编码器在IDE中打开son.java来检查语法,或者导入或任何冲突,然后运行它

我的想法能实现吗?已经有类似的东西了吗


任何信息将不胜感激,提前感谢数百万

老实说,这听起来不像是代码生成的好用例。您不应该为每个测试用例生成一个类,而应该实现一个更通用的测试实用程序,它将所需的输入作为其数据,并基于该数据执行通用测试代码

从您编写的内容来看,这可能类似于测试的简单基类:

现在,您可以编写三个测试类,它们继承自这个AbstractServerDependent测试,而无需复制粘贴代码

abstract class AbstractServerDependantTest {

  protected Server server;

  protected Client client;

  @Before
  public void setUp() {
    server = new Server();
    server.start();
    client = new Client();
    client.connectTo(server);
  }

  @After
  public void tearDpwm() {
    client.disconnect();
    server.shutDown();
  }
}