这次有点棘手的问题(对我来说)

我有以下设置:

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)

但是我仍然认为您不需要这样做,因为二进制文件应该已经是测试的类路径。

09-10 13:33
查看更多