在我的项目中,我动态生成源代码。
现在我想为它生成测试。
使用以下gradle构建文件成功生成源代码:
apply plugin: 'com.android.library'
configurations {pmd}
android {
...
gradle.projectsEvaluated {
preBuild.dependsOn genSources
}
sourceSets {
main {
java {
srcDir 'target/generated-sources/main/java'
}
}
}
}
task genSources << {
println "Generating sources...."
ant.fmpp configuration:"src/main/resources/codegen/config.fmpp",
sourceRoot:"src/main/resources/codegen/templates",
outputRoot:"target/generated-sources/main/java";
}
dependencies {
...
testCompile 'junit:junit:4.12'
...
}
buildscript {
repositories {
maven {
url "http://repo1.maven.org/maven2/"
}
}
dependencies {
classpath group: 'net.sourceforge.fmpp', name: 'fmpp', version: '0.9.14'
}
ant.taskdef(name: 'fmpp', classname:'fmpp.tools.AntTask', classpath: buildscript.configurations.classpath.asPath)
}
sourceSets 有生成源代码的链接。
因此,我可以从应用程序的源代码中使用它。
目前我认为如何生成测试,在哪个文件夹中生成测试以及如何将它们与junit库链接。
我使用了类似的逻辑。 (绝对不确定是否正确)
我为测试生成再创建了一个任务:
task genTests << {
println "Generating tests...."
ant.fmpp configuration:"src/main/resources/codegen/config.fmpp",
sourceRoot:"src/main/resources/codegen/templates/tests",
outputRoot:"target/generated-sources/main/java/tests";
}
将此任务添加到构建过程
gradle.projectsEvaluated {
preBuild.dependsOn genSources
preBuild.dependsOn genTests
}
并在sourceSets
添加了以下行:
sourceSets {
main {
java {
srcDir 'target/generated-sources/main/java'
}
}
test {
java {
srcDir 'target/generated-sources/main/java/tests'
}
}
}
在android studio
个文件中有以下结构:
java
com.package.model
com.package.model(test)
生成测试测试,但是 它们在单独的文件夹中生成,例如
java
com.package.model
com.package.model(test)
com.generatedpackage.model <--- here (physical location is in target folder)
找不到和junit
库:
import org.junit.Test;
无法解析符号测试。
测试生成的正确方法是什么?或者至少如何为测试添加junit
的依赖项?