การทดสอบหลายโครงการที่มีการไล่ระดับสี


153

ฉันมีการกำหนดค่าหลายโครงการและฉันต้องการใช้การไล่ระดับสี

โครงการของฉันเป็นแบบนี้:

  • โครงการ A

    • -> src/main/java
    • -> src/test/java
  • โครงการ B

    • -> src/main/java(ขึ้นอยู่src/main/javaกับโครงการ A )
    • -> src/test/java(ขึ้นอยู่src/test/javaกับโครงการ A )

ไฟล์Project B ของฉันbuild.gradleเป็นดังนี้:

apply plugin: 'java'
dependencies {
  compile project(':ProjectA')
}

งานcompileJavaที่ดีในการทำงาน แต่compileTestJavaไม่ได้รวบรวมไฟล์ทดสอบจากโครงการจะ


คำตอบ:


122

เลิกใช้ - สำหรับ Gradle 5.6 ขึ้นไปใช้คำตอบนี้

ในโครงการ Bคุณเพียงแค่ต้องเพิ่มการtestCompileพึ่งพา:

dependencies {
  ...
  testCompile project(':A').sourceSets.test.output
}

ทดสอบกับ Gradle 1.7


7
เปิดใช้งานคุณสมบัติคลาสเลิกใช้ - ใช้เอาต์พุตแทน
Fesler

12
สิ่งนี้ไม่สามารถใช้งานได้ใน Gradle 1.3 เนื่องจาก sourceSets ไม่ได้เป็นทรัพย์สินสาธารณะของโครงการอีกต่อไป
David Pärsson

3
โปรดทราบว่าโซลูชันข้างต้นต้องใช้อย่างน้อยหนึ่งครั้งgradle testClassesก่อนที่โครงสร้างบิลด์จะใช้งานได้จริง เช่นปลั๊กอิน Eclipse จะไม่อนุญาตให้คุณนำเข้าโครงการก่อนหน้านั้น มันเป็นความอัปยศจริงๆtestCompile project(':A')ไม่ทำงาน @ DavidPärsson: "Gradle 1.3" ขัดแย้ง "ไม่นาน" ตั้งแต่ Fesler ทดสอบกับ Gradle 1.7
Patrick Bergner

3
ไม่ได้ผลสำหรับฉัน ล้มเหลวด้วยการพึ่งพาแบบวน: compileTestJava \ ---: testClasses \ ---: compileTestJava (*)
rahulmohan

8
อย่าทำเช่นนี้โครงการไม่ควรเข้าถึงโครงการอื่น แทนที่จะใช้คำตอบของ Nikita ให้ทำแบบจำลองนี้เป็นการอ้างอิงโครงการอย่างถูกต้อง
Stefan Oehme

63

วิธีง่ายๆคือการเพิ่มการพึ่งพางานอย่างชัดเจนใน ProjectB:

compileTestJava.dependsOn tasks.getByPath(':ProjectA:testClasses')

วิธีที่ยาก (แต่ชัดเจนยิ่งขึ้น) คือการสร้างการกำหนดค่าส่วนเพิ่มเติมสำหรับ ProjectA:

task myTestsJar(type: Jar) { 
  // pack whatever you need...
}

configurations {
  testArtifacts
}

artifacts {
   testArtifacts myTestsJar
}

และเพิ่มการtestCompileพึ่งพาสำหรับ ProjectB

apply plugin: 'java'
dependencies {
  compile project(':ProjectA')
  testCompile project(path: ':ProjectA', configuration: 'testArtifacts')
}

3
ฉันลองวิธีนี้ (วิธีง่าย ๆ ) และในขณะที่ทำให้แน่ใจว่าสร้าง testClasses มันไม่ได้เพิ่มเส้นทางการทดสอบไปยัง CLASSPATH ดังนั้นการทดสอบ ProjectB ของฉันที่ขึ้นอยู่กับคลาสทดสอบ ProjectA ยังไม่สามารถสร้างได้
pjz

1
@dmoebius คุณจะต้องเพิ่มtestArtifactsการกำหนดค่าเช่นนี้configurations { testArtifacts } สำหรับรายละเอียดเพิ่มเติมโปรดดูที่ส่วนนี้ของ Gradle ความช่วยเหลือ: gradle.org/docs/current/dsl/...
Nikita Skvortsov

7
ใน Gradle 1.8 คุณอาจต้องการfrom sourceSets.test.outputและอาจclassifier = 'tests'แทนที่// pack whatever you need...คำตอบ
Peter Lamberg

1
ยืนยันว่าด้วย Gradle 1.12 โดยใช้โซลูชันเต็มรูปแบบโดย @PeterLamberg แนะนำให้ใช้งานเพิ่มเติมตามที่คาดไว้ ไม่ส่งผลกระทบต่อการนำเข้าโครงการไปยัง Eclipse
sfitts

3
สิ่งนี้ใช้ได้กับฉันใน Gradle 4.7 ตอนนี้พวกเขามีเอกสารบางอย่างเกี่ยวกับวิธีการที่docs.gradle.org/current/dsl/…
นาธานวิลเลียมส์

19

ตอนนี้ได้รับการสนับสนุนเป็นคุณลักษณะชั้นหนึ่งใน Gradle โมดูลที่มีjavaหรือjava-libraryปลั๊กอินยังสามารถรวมjava-test-fixturesปลั๊กอินที่แสดงคลาสตัวช่วยและทรัพยากรที่จะใช้กับตัวtestFixturesช่วย ประโยชน์ของวิธีการนี้ต่อสิ่งประดิษฐ์และตัวแยกประเภทคือ:

  • การจัดการการพึ่งพาที่เหมาะสม (การใช้งาน / API)
  • การแยกที่ดีจากรหัสทดสอบ (ชุดซอร์สแยก)
  • ไม่จำเป็นต้องกรองคลาสทดสอบเพื่อแสดงเฉพาะยูทิลิตี้
  • ดูแลโดย Gradle

ตัวอย่าง

:modul:one

Modul / หนึ่ง / build.gradle

plugins {
  id "java-library" // or "java"
  id "java-test-fixtures"
}

Modul / หนึ่ง / src / testFixtures / java / co.th / ตัวอย่าง / Helper.java

package com.example;
public class Helper {}

:modul:other

Modul / อื่น ๆ / build.gradle

plugins {
  id "java" // or "java-library"
}
dependencies {
  testImplementation(testFixtures(project(":modul:one")))
}

Modul / อื่น ๆ / src / test / java / co.th / ตัวอย่าง / อื่น ๆ / SomeTest.java

package com.example.other;
import com.example.Helper;
public class SomeTest {
  @Test void f() {
    new Helper(); // used from :modul:one's testFixtures
  }
}

อ่านเพิ่มเติม

สำหรับข้อมูลเพิ่มเติมดูเอกสารประกอบ:
https://docs.gradle.org/current/userguide/java_testing.html#sec:java_test_fixtures

มันถูกเพิ่มเข้าไปใน 5.6:
https://docs.gradle.org/5.6/release-notes.html#test-fixtures-for-java-projects


พวกเขากำลังทำงานเพื่อสนับสนุนสิ่งนี้บน Android โปรดดูissuetracker.google.com/issues/139762443และissuetracker.google.com/issues/139438142
Albert Vila Calvo

18

ฉันเจอปัญหานี้ด้วยตัวเองเมื่อเร็ว ๆ นี้และมนุษย์ก็เป็นปัญหาที่ยากลำบากในการหาคำตอบ

ข้อผิดพลาดที่คุณทำคือคิดว่าโครงการควรส่งออกองค์ประกอบการทดสอบในลักษณะเดียวกับที่ส่งออกสิ่งประดิษฐ์หลักและการอ้างอิง

สิ่งที่ฉันประสบความสำเร็จมากขึ้นโดยส่วนตัวคือการสร้างโครงการใหม่ใน Gradle ในตัวอย่างของคุณฉันจะตั้งชื่อมัน

โครงการ A_Test -> src / main / java

ฉันจะใส่ไฟล์ src / main / java ที่คุณมีอยู่ใน Project A / src / test / java ทำการอ้างอิงใด ๆ ของ TestCompile ของโปรเจ็กต์ A การคอมไพล์อ้างอิงของ Project A_Test

จากนั้นให้ Project A_Test เป็นแบบทดสอบการคอมไพล์ของโครงการ B

มันไม่ใช่เหตุผลเมื่อคุณมาจากมุมมองของผู้เขียนทั้งสองโครงการ แต่ฉันคิดว่ามันสมเหตุสมผลเมื่อคุณคิดถึงโครงการเช่น junit และ scalatest (และอื่น ๆ ) แม้ว่ากรอบงานเหล่านั้นเกี่ยวข้องกับการทดสอบ ไม่ถือว่าเป็นส่วนหนึ่งของเป้าหมาย "ทดสอบ" ภายในกรอบงานของตนเอง - พวกเขาสร้างสิ่งประดิษฐ์หลักที่โครงการอื่น ๆ เพิ่งจะเกิดขึ้นเพื่อใช้ในการกำหนดค่าการทดสอบของพวกเขาคุณเพียงแค่ต้องการทำตามรูปแบบเดียวกันนั้น

การพยายามทำคำตอบอื่น ๆ ที่แสดงไว้ที่นี่ไม่ได้ผลสำหรับฉันเป็นการส่วนตัว (ใช้ Gradle 1.9) แต่ฉันพบว่ารูปแบบที่ฉันอธิบายที่นี่เป็นวิธีที่สะอาดกว่าอยู่แล้ว


ใช่เลือกวิธีนี้ในตอนท้ายของวัน
koma

นี่เป็นวิธีที่ดีที่สุด! ยกเว้นฉันจะเก็บรหัสทดสอบในโครงการ A และย้ายการอ้างอิงสำหรับทั้ง A src / test / java และ B src / test / java ไปยัง A_Test จากนั้นให้ Project A_Test ทดสอบการใช้งานของทั้ง A และ B
Erik Sillén

17

ฉันรู้ว่ามันเป็นคำถามเก่า แต่ฉันมีปัญหาเดียวกันและใช้เวลาในการหาว่าเกิดอะไรขึ้น ฉันใช้ Gradle 1.9 การเปลี่ยนแปลงทั้งหมดควรเป็นของ ProjectBbuild.gradle

ในการใช้คลาสทดสอบจาก ProjectA ในการทดสอบของ ProjectB:

testCompile files(project(':ProjectA').sourceSets.test.output.classesDir)

เมื่อต้องการตรวจสอบให้แน่ใจว่าsourceSetsคุณสมบัติพร้อมใช้งานสำหรับ ProjectA:

evaluationDependsOn(':ProjectA')

เพื่อให้แน่ใจว่ามีการทดสอบคลาสจาก ProjectA จริง ๆ แล้วเมื่อคุณคอมไพล์ ProjectB:

compileTestJava.dependsOn tasks.getByPath(':ProjectA:testClasses')

1
.classesDirนอกจากนี้ยังทำงานให้ฉันยกเว้นผมต้องละเว้น

11

ใหม่โซลูชั่น testJar (รองรับการพึ่งพา trnsitive) พร้อมใช้งานเป็นปลั๊กอิน gradle:

https://github.com/hauner/gradle-plugins/tree/master/jartest

https://plugins.gradle.org/plugin/com.github.hauner.jarTest/1.0

จากเอกสาร

ในกรณีที่คุณมีการสร้าง gradle หลายโครงการคุณอาจมีการทดสอบการพึ่งพาระหว่างโครงการย่อย (ซึ่งอาจเป็นคำใบ้ว่าโครงการของคุณไม่มีโครงสร้างที่ดี)

ตัวอย่างเช่นสมมติโครงการที่โครงการย่อยโครงการ B ขึ้นอยู่กับโครงการ A และ B ไม่เพียง แต่มีการพึ่งพาการคอมไพล์ใน A แต่ยังเป็นการทดสอบการพึ่งพา ในการรวบรวมและเรียกใช้การทดสอบของ B เราจำเป็นต้องมีคลาสตัวช่วยทดสอบจาก A.

โดยค่าเริ่มต้น gradle ไม่ได้สร้างสิ่งประดิษฐ์ jar จากผลลัพธ์การสร้างการทดสอบของโครงการ

ปลั๊กอินนี้เพิ่มการกำหนดค่า testArchives (ขึ้นอยู่กับ testCompile) และงาน jarTest เพื่อสร้าง jar จากชุดแหล่งทดสอบ (ด้วยการทดสอบตัวแยกประเภทที่เพิ่มในชื่อของ jar) จากนั้นเราสามารถพึ่งพา B ในการกำหนดค่า testArchives ของ A (ซึ่งจะรวมถึงการพึ่งพาสกรรมกริยาของ A)

ใน A เราจะเพิ่มปลั๊กอินไปที่ build.gradle:

apply plugin: 'com.github.hauner.jarTest'

ใน B เราอ้างอิงการกำหนดค่า testArchives ดังนี้:

dependencies {
    ...
    testCompile project (path: ':ProjectA', configuration: 'testArchives') 
}

1
แม้ว่าลิงก์นี้อาจตอบคำถามได้ดีกว่าหากรวมส่วนสำคัญของคำตอบไว้ที่นี่และให้ลิงก์สำหรับการอ้างอิง คำตอบสำหรับลิงก์เท่านั้นอาจไม่ถูกต้องหากหน้าเว็บที่เชื่อมโยงมีการเปลี่ยนแปลง - จากการรีวิว
เอียน

เพิ่มข้อความไม่กี่บรรทัด
demon101

อย่างไรก็ตามมีการให้ข้อมูลเกี่ยวกับปลั๊กอิน gradle ใหม่
demon101

4
@ demon101 ไม่ทำงานใน Gradle 4.6 ได้รับข้อผิดพลาดCould not get unknown property 'testClasses' for project ':core' of type org.gradle.api.Project.
Vignesh Sundar

11

โปรดอ่านซอลเบลโลว์ปรับปรุง

ปัญหาที่คล้ายกันที่อธิบายโดย JustACluelessNewbie เกิดขึ้นใน IntelliJ IDEA ปัญหาคือการพึ่งพาtestCompile project(':core').sourceSets.test.outputนั้นหมายถึง: "ขึ้นอยู่กับคลาสที่สร้างขึ้นโดยงานสร้าง gradle" ดังนั้นหากคุณเปิดโปรเจ็กต์ใหม่ที่ไม่ได้สร้างคลาส แต่ IDEA จะไม่รู้จักและรายงานข้อผิดพลาด

ในการแก้ไขปัญหานี้คุณต้องเพิ่มการพึ่งพาไฟล์ทดสอบถัดจากการพึ่งพาคลาสที่คอมไพล์แล้ว

// First dependency is for IDEA
testCompileOnly files { project(':core').sourceSets.test.java.srcDirs }
// Second is for Gradle
testCompile project(':core').sourceSets.test.output

คุณสามารถสังเกตเห็นการพึ่งพาการยอมรับจากความคิดในการตั้งค่าโมดูล -> การอ้างอิง (ขอบเขตการทดสอบ)

Btw นี่ไม่ใช่วิธีแก้ปัญหาที่ดีดังนั้นการเปลี่ยนโครงสร้างใหม่จึงมีมูลค่าการพิจารณา Gradle เองมีโปรเจ็กต์ย่อยพิเศษที่มีคลาสการทดสอบสนับสนุนเท่านั้น ดูhttps://docs.gradle.org/current/userguide/test_kit.html

ปรับปรุง 2016-06-05 เพิ่มเติมฉันกำลังคิดเกี่ยวกับวิธีแก้ปัญหาที่เสนอน้อยกว่าที่ฉันชอบ มีปัญหาเล็กน้อยกับมัน:

  1. มันสร้างสองอ้างอิงในความคิด จุดหนึ่งในการทดสอบแหล่งที่มาอื่นเพื่อรวบรวมชั้นเรียน และเป็นสิ่งสำคัญที่ลำดับความสำคัญเหล่านี้ได้รับการยอมรับจาก IDEA คุณสามารถเล่นโดยเปลี่ยนลำดับการพึ่งพาในการตั้งค่าโมดูล -> แท็บการพึ่งพา
  2. ด้วยการประกาศการขึ้นต่อกันเหล่านี้คุณจะสร้างความสับสนให้กับโครงสร้างการพึ่งพา

ดังนั้นทางออกที่ดีกว่าคืออะไร ในความคิดของฉันมันเป็นการสร้างชุดซอร์สที่กำหนดเองใหม่และใส่คลาสที่แบ่งใช้ ผู้เขียนจริงของโครงการ Gradle ทำโดยสร้างชุดแหล่งที่มาของ testFixtures

ที่จะทำคุณเพียงแค่ต้อง:

  1. สร้างชุดซอร์สและเพิ่มการกำหนดค่าที่จำเป็น ตรวจสอบปลั๊กอินสคริปต์นี้ที่ใช้ในโครงการ Gradle: https://github.com/gradle/gradle/blob/v4.0.0/gradle/testFixtures.gradle
  2. ประกาศการพึ่งพาที่เหมาะสมในโครงการที่พึ่งพา:

    dependencies {
        testCompile project(path: ':module-with-shared-classes', configuration: 'testFixturesUsageCompile')
    }
    
  3. นำเข้าโครงการ Gradle ไปที่ IDEA และใช้ตัวเลือก "สร้างโมดูลแยกต่างหากต่อชุดแหล่งที่มา" ในขณะที่นำเข้า


1
@jannis แก้ไขแล้ว Btw Gradle ย้ายปลั๊กอินสำหรับติดตั้งอุปกรณ์ทดสอบ Groovy ไปยัง Kotlin ใหม่ตาม: github.com/gradle/gradle/blob/v5.0.0/buildSrc/subprojects/ …
VáclavKužel

@ VáclavKuželฉันค้นหาวิธีแก้ปัญหาที่น่าสนใจของคุณผ่านโพสต์บล็อกของคุณและมันแก้ไขปัญหาของฉันได้เป็นอย่างดี ขอบคุณ;)
zaerymoghaddam

10

วิธีแก้ปัญหาของ Fesler ไม่ได้ผลสำหรับฉันเมื่อฉันพยายามสร้างโปรเจค android (gradle 2.2.0) ดังนั้นฉันต้องอ้างอิงคลาสที่ต้องการด้วยตนเอง:

android {
    sourceSets {
        androidTest {
            java.srcDir project(':A').file("src/androidTest/java")
        }
        test {
            java.srcDir project(':A').file("src/test/java")
        }
    }
}

1
พิมพ์ผิดเล็กน้อยไม่มีคำพูดสิ้นสุดหลังจากโปรเจ็กต์ (': A') สิ่งนี้ใช้ได้กับฉันแล้วขอบคุณ m8
Ryan Newsom

1
สำหรับ Android ความคิดนี้ทำงานได้อย่างสวยงามสำหรับฉันโดยไม่รู้สึก
แฮ็ค

@arberg ใช่ดูเหมือนเป็นวิธีที่ดี ข้อ จำกัด เดียวที่ฉันเห็นคือกับ@VisibleForTestingกฎผ้าสำลี คุณจะไม่สามารถเรียกวิธีการดังกล่าวจากโมดูลปกติภายใต้ไม่ทดสอบโฟลเดอร์
Beloo

5

ฉันมาช้าไปงานเลี้ยง (ตอนนี้เป็น Gradle v4.4) แต่สำหรับใครก็ตามที่พบสิ่งนี้:

สมมติว่า:

~/allProjects
|
|-/ProjectA/module-a/src/test/java
|
|-/ProjectB/module-b/src/test/java

ไปที่ build.gradle ของโครงการ B (อันที่ต้องการคลาสการทดสอบจาก A) และเพิ่มรายการต่อไปนี้:

sourceSets {
    String sharedTestDir = "${projectDir}"+'/module-b/src/test/java'
    test {
        java.srcDir sharedTestDir
    }
}

หรือ (สมมติว่าโครงการของคุณชื่อ "ProjectB")

sourceSets {
    String sharedTestDir = project(':ProjectB').file("module-b/src/test/java")
    test {
        java.srcDir sharedTestDir
    }
}

Voila!


3
คำถามไม่ได้พูดถึง Android คุณสามารถทำให้คำตอบของคุณไม่เชื่อว่านักพัฒนากำลังพัฒนาสำหรับ Android หรือไม่หรือเป็นเพียงสำหรับนักพัฒนา Android?
Robin Green

4

หากคุณมีการอ้างอิงที่จำลองมาซึ่งคุณต้องใช้ร่วมกันระหว่างการทดสอบคุณสามารถสร้างโครงการใหม่projectA-mockแล้วเพิ่มเป็นการทดสอบที่ต้องพึ่งพาProjectAและProjectB:

dependencies {
  testCompile project(':projectA-mock')
}

นี่คือวิธีการแก้ปัญหาที่ชัดเจนในการอ้างอิงหุ้นเยาะเย้ย แต่ถ้าคุณจำเป็นต้องเรียกใช้การทดสอบจากProjectAในProjectBการใช้วิธีการแก้ปัญหาอื่น ๆ


ทางออกที่ดีสำหรับกรณีเยาะเย้ยที่ใช้ร่วมกัน!
Erik Sillén

4

หากคุณต้องการใช้การพึ่งพาสิ่งประดิษฐ์ที่จะมี:

  • คลาสซอร์สของ ProjectB ขึ้นอยู่กับคลาสซอร์สของ Project A
  • คลาสการทดสอบของ ProjectB ขึ้นอยู่กับคลาสการทดสอบของ Project A

ส่วนการพึ่งพาของ ProjectB ในbuild.gradleควรมีลักษณะดังนี้:

dependencies {

  compile("com.example:projecta:1.0.0")

  testCompile("com.example:projecta:1.0.0:tests")

}

สำหรับการทำงาน Projecta ความต้องการที่จะสร้าง-testsขวดและรวมไว้ในสิ่งประดิษฐ์ที่จะผลิต

build.gradle ของProjectAควรมีการกำหนดค่าดังนี้:

task testsJar(type: Jar, dependsOn: testClasses) {
    classifier = 'tests'
    from sourceSets.test.output
}

configurations {
    tests
}

artifacts {
    tests testsJar
    archives testsJar
}

jar.finalizedBy(testsJar)

เมื่อสิ่งประดิษฐ์ของ ProjectA ถูกเผยแพร่ไปยังวัตถุของคุณพวกเขาจะรวมถึงการทดสอบขวด

testCompileในส่วนการอ้างอิง ProjectB จะนำมาในชั้นเรียนใน-testsขวด


ถ้าคุณต้องการรวมซอร์สของคลาส ProjectA และคลาสการทดสอบใน ProjectB เพื่อวัตถุประสงค์ในการพัฒนาส่วนการอ้างอิงในbuild.gradleของ ProjectB จะมีลักษณะดังนี้:

dependencies {

  compile project(':projecta')

  testCompile project(path: ':projecta', configuration: 'tests')

}

1
น่าเสียดายที่ (ใน Gradle 6) การแบนรวมซึ่งเป็นสิ่งที่ฉันต้องการไม่ทำงานอีกต่อไปเพราะไม่มี 'การทดสอบ' การกำหนดค่าอีกต่อไป ใช้println(configurations.joinToString("\n") { it.name + " - " + it.allDependencies.joinToString() })(ใน kotlin buildscript) ฉันกำหนดว่าการกำหนดค่าใดที่ยังคงมีอยู่และมีการพึ่งพา แต่สำหรับ Gradle ทั้งหมดเหล่านี้บ่น:Selected configuration 'testCompileClasspath' on 'project :sdk' but it can't be used as a project dependency because it isn't intended for consumption by other components.
Xerus

2

คำตอบอื่น ๆ บางข้อทำให้เกิดข้อผิดพลาดไม่ทางใดก็ทางหนึ่ง - Gradle ไม่พบคลาสการทดสอบจากโปรเจ็กต์อื่นหรือโปรเจ็กต์ Eclipse มีการพึ่งพาที่ไม่ถูกต้องเมื่อนำเข้า หากใครมีปัญหาเดียวกันฉันขอแนะนำให้ไปกับ:

testCompile project(':core')
testCompile files(project(':core').sourceSets.test.output.classesDir)

บรรทัดแรกบังคับให้ Eclipse เชื่อมโยงโครงการอื่น ๆ เป็นการอ้างอิงดังนั้นแหล่งที่มาทั้งหมดจะถูกรวมและเป็นปัจจุบัน ที่สองช่วยให้ Gradle มองเห็นแหล่งที่มาได้จริงในขณะที่ไม่ก่อให้เกิดข้อผิดพลาดในการพึ่งพาที่ไม่ถูกต้องเช่นtestCompile project(':core').sourceSets.test.outputนั้น


2

ที่นี่หากคุณใช้Kotlin DSLคุณควรสร้างงานของคุณแบบนั้นตามเอกสารประกอบของGradle

เช่นเดียวกับคำตอบก่อนหน้านี้คุณต้องสร้างการกำหนดค่าพิเศษภายในโครงการที่จะแชร์คลาสการทดสอบเพื่อที่คุณจะได้ไม่ต้องผสมการทดสอบและคลาสหลัก

ขั้นตอนง่าย ๆ

  1. ในโครงการ Aคุณจะต้องเพิ่มในbuild.gradle.kts:
configurations {
    create("test")
}

tasks.register<Jar>("testArchive") {
    archiveBaseName.set("ProjectA-test")
    from(project.the<SourceSetContainer>()["test"].output)
}

artifacts {
    add("test", tasks["testArchive"])
}
  1. จากนั้นในโครงการ Bของคุณในการอ้างอิงคุณจะต้องเพิ่มในbuild.gradle.kts:
dependencies {
    implementation(project(":ProjectA"))
    testImplementation(project(":ProjectA", "test"))
}

-1

ในโครงการ B:

dependencies {
  testCompile project(':projectA').sourceSets.test.output
}

ดูเหมือนว่าจะทำงานใน 1.7-rc-2


2
นอกจากนี้ยังสร้างภาวะแทรกซ้อนที่ไม่จำเป็นในการจัดการโครงการโดย Eclipse วิธีการแก้ปัญหาที่แนะนำโดย @NikitaSkvortsov นั้นดีกว่า
sfitts
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.