生成JAVA文件并在运行时使用它们
我正在尝试以下内容,由Cedric Beust在其他线程中提出 您可以将此作为预测试任务自己完成:实现代码生成器 以XML形式获取信息,获取相应的Java 并生成包含所有注释的TestNG源文件 放置在正确的位置。然后在该文件上运行TestNG 我对代码生成一无所知。有人能指引我正确的方向吗?一些简单的例子会很好 更新:这是我想要生成的模板生成JAVA文件并在运行时使用它们,java,testing,code-generation,testng,Java,Testing,Code Generation,Testng,我正在尝试以下内容,由Cedric Beust在其他线程中提出 您可以将此作为预测试任务自己完成:实现代码生成器 以XML形式获取信息,获取相应的Java 并生成包含所有注释的TestNG源文件 放置在正确的位置。然后在该文件上运行TestNG 我对代码生成一无所知。有人能指引我正确的方向吗?一些简单的例子会很好 更新:这是我想要生成的模板 public class <tobeReadFromConfigFile> { @Test(groups="to be read from
public class <tobeReadFromConfigFile>
{
@Test(groups="to be read from config file")
public void <tobereadfromconfigfile>{
//to be read from config file(Name of function to call)
//to be read from config file(Name of function to call)
//to be read from config file(Name of function to call)
}
.
.
.
}
公共类
{
@测试(groups=“从配置文件中读取”)
公共空间{
//从配置文件读取(要调用的函数名称)
//从配置文件读取(要调用的函数名称)
//从配置文件读取(要调用的函数名称)
}
.
.
.
}
函数中的代码将只是函数调用,必须从配置文件中准确读取和复制。FreeMarker模板如下所示:
public class ${className} {
@Test(groups="${testGroups}")
public void ${testMethodName}() {
<#list methods as m>
${m}
</#list>
}
}
public类${className}{
@测试(groups=“${testGroups}”)
public void${testMethodName}(){
${m}
}
}
它将从一个上下文中填充,基本上是一个hashmap,其中包含className
、testGroups
等条目,这些条目将从XML文件中读取<代码>方法将是一个集合
(类似于列表),也可以从XML文件中读取
当然,还有许多其他模板库;这只是一个例子
FreeMarker模板的外观如下所示:
public class ${className} {
@Test(groups="${testGroups}")
public void ${testMethodName}() {
<#list methods as m>
${m}
</#list>
}
}
public类${className}{
@测试(groups=“${testGroups}”)
public void${testMethodName}(){
${m}
}
}
它将从一个上下文中填充,基本上是一个hashmap,其中包含className
、testGroups
等条目,这些条目将从XML文件中读取<代码>方法将是一个集合
(类似于列表),也可以从XML文件中读取
当然,还有许多其他模板库;这只是一个例子
我编写了一个eclipse插件,该插件使用freemarker模板,并从org.eclipse.jdt.core中提供命名java类的上下文作为ICompilationUnit。您可以在上查看它。我已经编写了一个eclipse插件,它使用freemarker模板,并从org.eclipse.jdt.core中提供命名java类的上下文ICompilationUnit。您可以在查看什么示例,代码生成?使用任何模板引擎,如,并用Java代码和任何需要注入的动态内容填充它。@DaveNewton-是的,代码生成示例适合于上述原因。不知道您试图生成的内容会使提供更具体的帮助变得不可能。模板可以是任何内容,包括有效的Java源代码。例如,您可以在给定外部数据的情况下构建Java方法,比如从XML。除了“使用模板和数据构建合法Java代码”之外,您没有提供足够的信息来告诉您更多内容。@DaveNewton-添加了一个示例。出于篇幅的目的,移动到answer。只需查看FreeMarker文档,了解如何使用它、读取数据、构建上下文和评估模板。无论选择哪个库,您都将使用基本相同的步骤。什么示例,代码生成?使用任何模板引擎,如,并用Java代码和任何需要注入的动态内容填充它。@DaveNewton-是的,代码生成示例适合于上述原因。不知道您试图生成的内容会使提供更具体的帮助变得不可能。模板可以是任何内容,包括有效的Java源代码。例如,您可以在给定外部数据的情况下构建Java方法,比如从XML。除了“使用模板和数据构建合法Java代码”之外,您没有提供足够的信息来告诉您更多内容。@DaveNewton-添加了一个示例。出于篇幅的目的,移动到answer。只需查看FreeMarker文档,了解如何使用它、读取数据、构建上下文和评估模板。无论选择哪个库,您都将使用基本相同的步骤。配置文件可以是任何内容(XML、JSON或任何内容),对吗?然后我将使用Fremarker,它将读取配置文件并填充模板,对吗?@questions您是加载配置文件的人——它可以被uuencoded Swahili颠倒写,只要您可以从中提取所需的数据并将其转换为FreeMarker/等可以处理的内容。FreeMarker是一个模板引擎——您的代码消化配置信息并为模板设置上下文。如果您想直接从XML到Java而不需要代码,请使用XSL(ew)。您还可以使用Groovy/JRuby/etc解析XML并发出Java code.Grreat。。谢谢这看起来是一个好方法吗,我将在TestNG中使用上面生成的类?@questions您可以随意使用生成的代码——模板的输出是任意的,只要它满足您的需要,它可以是任何内容。配置文件可以是任何内容(XML或JSON或任何内容),对吗?然后我将使用Fremarker,它将读取配置文件并填充模板,对吗?@questions您是加载配置文件的人——它可以被uuencoded Swahili颠倒写,只要您可以从中提取所需的数据并将其转换为FreeMarker/等可以处理的内容。FreeMarker是一个模板引擎——您的代码消化配置信息并为模板设置上下文。如果您想直接从XML到Java而不需要代码,请使用XSL(ew)。您还可以使用Groovy/JRuby/etc解析XML并发出Java code.Grreat。。谢谢这看起来是一个好方法吗,我将在TestNG中使用上面生成的类?@questions您可以随意使用生成的代码--模板的输出是任意的,只要它能满足您的需要,