我可以检测一个Java类,然后在运行时使用新检测的类编译另一个测试吗?

时间:2019-07-13 22:27:39

标签: java compilation jvm javaagents javacompiler

我正在尝试检测Java类,通过EvoSuite动态为原始类生成测试,然后在该类中执行测试,但是当我通过执行注入到该类中的javac流程指令进行编译时,却没有被执行。

我正在使用EvoSuite,因为我希望能够在运行时为任何类中的任何方法捕获变量,而无需显式指定参数。自动生成输入是必不可少的,因为我希望能够执行此操作,而不需要来自用户的类和方法名称以外的其他输入。

我有一个使用类名作为参数的工具,该工具通过在运行时以及通过URLClassLoader在类中执行方法时注入指令以动态捕获值来对类进行检测。我感兴趣的值是通过通过类加载器获得的Class对象执行时捕获的。但是,当我通过工具执行以下步骤时:

  1. 通过自动测试生成框架EvoSuite为我的目标方法生成单元测试。
  2. 通过使用ProcessBuilder执行命令行参数来编译这些测试。
  3. 通过JUnitCore执行测试。

但是,实际上没有捕获到我希望捕获的变量,并且当我在工具代码中插入调试日志记录语句时,它表明当EvoSuite测试进行时,用于记录变量的方法没有被调用。正在运行。

我可以使用javax.tools.ToolProvider通过链接类的检测版本而不是未插入的源字节码来编译测试。

0 个答案:

没有答案