这次有点棘手的问题(对我来说)
我有以下设置:
src
---main
---java
---com.company.myclass.java
---test
---java
---com.test.company.myClassTest.java
---com.test.company.Testtest.java
---resources
-testconfig.xml
build
---classes
--- 'compiled classfiles in correct structure'
到目前为止非常基本。
事情是:
在testconfig.xml中,我有一些标签,例如:
<element class="com.company.myclass" />
并且需要此(激活)的框架找不到类(ClassNotFoundException)。 (如果知道,可以在内部使用Spring for DI)
但是,我可以使用新的myclass()在TestTest中实例化myclass。
但是,如果我将有问题的文件从src / main / java复制到src / test / java,则Framework可以找到合适的类。
当框架在类路径上查找其配置,并找到testconfig.xml时,在测试时src / test / resources显然在类路径上是IS,解释了为什么它可用于复制到src / test / java的类。
但是新的myclass()!= null和常识表明src / main / java也是如此,如果不是,我将如何测试?
我尝试将src / main添加到classpath
sourceSets.test.runtimeClasspath += files(sourceSets.main.java.srcDirs)
但它没有任何好处。我在这里想念什么?
更新:
我应该补充说,activitiengine是在测试类中实例化的,它需要的类必须与创建引擎时位于“相同的类路径”上。我不知道这是否有帮助
感谢致敬,
附上我的build.gradle:
apply plugin: 'java'
apply plugin: 'eclipse'
sourceCompatibility = 1.8
version = '1.0'
def activitiversion = '5.14'
def bpmndir = 'src/main/resources/bpmn/'
sourceSets {
main {
resources {
exclude '**/*.bpmn'
}
}
}
sourceSets.test.runtimeClasspath += files(sourceSets.main.java.srcDirs)
task renameBPMN(type: Copy) {
outputs.upToDateWhen { false }
from(bpmndir)
into(bpmndir)
include ('**/*.bpmn')
rename ('(^.*)\\.(bpmn)$', '$1.bpmn20.xml')
}
compileJava.dependsOn renameBPMN
repositories {
maven {
url "http://10.95.17.191:9080/nexus/content/repositories/central"
}
maven {
url "http://10.95.17.191:9080/nexus/content/repositories/repo.maven.apache.org/"
}
}
dependencies {
compile group: 'org.activiti', name: 'activiti-engine', version: activitiversion
testCompile group: 'com.h2database', name: 'h2', version: '1.3.168'
compile group: 'org.slf4j', name: 'slf4j-api', version: '1.7.2'
compile group: 'org.slf4j', name: 'slf4j-jdk14', version: '1.7.2'
testCompile group: 'junit', name: 'junit', version: '4.11'
}
最佳答案
我的第一个建议是将java / main的类路径添加到测试类路径中。所以改变这个
sourceSets.test.runtimeClasspath += files(sourceSets.main.java.srcDirs)
对此:
sourceSets.test.runtimeClasspath += files(sourceSets.main.output)
但是我仍然认为您不需要这样做,因为二进制文件应该已经是测试的类路径。