当前位置: 首页 > 知识库问答 >
问题:

在不同模块的测试中使用测试包中的代码

李昌勋
2023-03-14

我有一个在kotlin的‘基地’项目配置与gradle DSL。在基我有模块'app'和模块'library'。模块应用程序使用模块库。我想从模块应用程序的测试(准确地说是库的testUtils包)访问模块库的测试。

task testJar(type: Jar, dependsOn: testClasses) {
    baseName = "test-${project.archivesBaseName}"
    from sourceSets.test.output
}

configurations {
    tests
}

artifacts {
    tests testJar
}

我还检查了代码所在的问题:

tasks {
    val sourcesJar by creating(Jar::class) {
        dependsOn(JavaPlugin.CLASSES_TASK_NAME)
        classifier = "sources"
        from(sourceSets["main"].allSource)
    }

    val javadocJar by creating(Jar::class) {
        dependsOn(JavaPlugin.JAVADOC_TASK_NAME)
        classifier = "javadoc"
        from(tasks["javadoc"])
    }

    artifacts {
        add("archives", sourcesJar)
        add("archives", javadocJar)
    }
}

我需要在库的源代码中添加tEstimplementation,这样在应用程序的测试中,我就可以使用库的测试包,而在应用程序的源代码中,我就不能使用库的测试了。

谢谢你。

import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
import java.time.Duration

plugins {
    kotlin("jvm") version "1.3.21"
}

allprojects {
    repositories {
        jcenter()
    }
}

subprojects {
    apply(plugin = "kotlin")
    dependencies {
        implementation(kotlin("stdlib-jdk8"))
    }
    tasks.withType<KotlinCompile> {
        kotlinOptions.jvmTarget = "1.8"
    }
    tasks.withType<Test> {
        useJUnitPlatform()

        // Make sure tests don't take over 10 minutes
        timeout.set(Duration.ofMinutes(10))
    }
}
import java.net.URI

rootProject.name = "base"

sourceControl {
    gitRepository(URI("https://github.com/path-to-github.git")) {
        producesModule("path.to.package:primitive-storage-layer")
    }
}

include("library")
include("app")
plugins {
    application
}

application {
    mainClassName = "path.to.package.MainKt"
}

val junitVersion = "5.5.0-M1"
val hamkrestVersion = "1.7.0.0"
val mockkVersion = "1.9.3"

dependencies {
    implementation(project(":library"))

    testImplementation("org.junit.jupiter:junit-jupiter-api:$junitVersion")
    testImplementation("org.junit.jupiter:junit-jupiter-params:$junitVersion")
    testImplementation("com.natpryce:hamkrest:$hamkrestVersion")
    testImplementation("io.mockk:mockk:$mockkVersion")

    runtime("org.junit.jupiter:junit-jupiter-engine:$junitVersion")
}
val primitiveLibraryVersion = "1.0"
val gsonVersion = "2.8.5"
val junitVersion = "5.5.0-M1"
val mockkVersion = "1.9.3"

dependencies {
    implementation("path.to.package:primitive-storage-layer:$primitiveLibraryVersion")
    implementation("com.google.code.gson:gson:$gsonVersion")

    testImplementation("org.junit.jupiter:junit-jupiter-api:$junitVersion")
    testImplementation("io.mockk:mockk:$mockkVersion")
}

共有1个答案

徐涵亮
2023-03-14

虽然可以生成一个包含测试的工件,然后从另一个项目中使用该工件,但我会避免这种情况,而是将测试实用程序重构到一个单独的子项目中(类似于${app}-test-kit),将代码放入主源集中,然后依赖于应用程序和库tEstimplementation配置中的子项目。

这给了你一个更清晰的分离,对于共享什么和为什么共享更明显。

 类似资料:
  • 我无法使用ArchUnit制定以下测试: 我想确保某个包中的所有类只访问应用程序基包之外或某个子包内的类(“或”而不是“xor”)。 我得到的是: 问题是,或条件应该在onlyAccessClassesthat()中。如果一个类同时具有两种类型的访问权限,上述公式将失败,我希望这两种类型都有效。 我怎样才能实现我想要的?谢谢你在这方面的任何帮助...

  • 我使用Spring和Junit4来测试我的服务器应用程序。我的应用程序使用Spring Security性,一些查询利用SpEL语法检查记录的用户。 因为我正在测试一些需要加载数据的场景,所以我遇到了一些问题,因为我不适合这样做。 例如: 这是一个使用自定义UserDetailService的测试示例。不幸的是,有些操作,如:createStandardFare()、createDailyCode

  • 问题内容: 我在一个模块中有一个测试类,该模块在其依赖项模块之一中扩展了另一个测试类。如何将依赖项的测试代码导入到依赖模块的测试范围中? 首先,我有两个模块,“ module-one”是对“ module-two”的依赖。是的子类。 但是构建失败了,因为没有将“模块一”的测试代码导入到“模块二”中,而只是将其导入到主代码中。 问题答案: 通常,除了常规的modulename.jar文件之外,还可以

  • 我最终做的是在测试设置过程中替换应用程序级图(MockRestAdapter就是在其中创建的

  • 我有一个类似这样的项目结构: -应用 --模块 2 //库模块 --模块3 //库模块 我正在为我的多模块Android项目编写仪器测试用例,其中包含jaco代码覆盖范围。如果我从“app”模块执行检测测试用例,则仅为“app”模块类生成代码覆盖率。 因此,为了获得“模块2”的代码覆盖率 当我在非应用程序模块中执行插装测试用例,无法启动主活动,插装期间应用程序未启动,测试用例失败时,会出现问题。

  • 我正在使用Eclipse中的 JUnit5位于modul-path上,并且在module-info.Java中是必需的。 当我尝试运行代码时,总是会收到以下消息: 初始化引导层java.lang.module.findException时出错:无法为C:\users\tim hp.p2\pool\plugins\org.junit.jupiter.migrationsupport_5.0.0.v2