Maven ข้ามการทดสอบ


225

ฉันใช้ Maven 2.2.1 และเพื่อสร้างโครงการของฉันฉันใช้คำสั่งนี้

mvn clean install -Dmaven.test.skip=true

อย่างไรก็ตามการสร้างล้มเหลวโดยบอกว่าไม่พบสิ่งประดิษฐ์อย่างใดอย่างหนึ่ง อย่างไรก็ตามเมื่อฉันใช้:

mvn clean install -DskipTests

ทุกอย่างทำงานได้ดี

จนถึงตอนนี้ฉันคิดว่าคำสั่งทั้งสองนี้เทียบเท่ากัน อย่างไรก็ตามลิงค์นี้ดูเหมือนว่าจะแนะนำให้-Dmaven.test.skip=trueข้ามการรวบรวมเคสทดสอบด้วย

อย่างไรก็ตามนั่นยังไม่ได้อธิบายให้ฉันฟังว่าทำไมคำสั่งหนึ่งทำงานและคำสั่งอื่นไม่ทำงาน จะขอบคุณถ้ามีคนอธิบายให้ฉันฟังหน่อย


1
คุณใช้ maven-surefire-plugin รุ่นใดอยู่? เหมือนกับรุ่น doc ที่คุณกำลังอ่านใช่ไหม
gerrytan

2
หนึ่งข้ามสิ่งปลูกสร้างอื่น ๆ หนึ่งข้าม หากคุณต้องการใช้ทั้งสองอย่าง
Elliott Frisch

1
คุณสามารถให้รายละเอียดของความล้มเหลว - ข้อความข้อผิดพลาดหรือ stacktrace?
Raghuram

1
ทำไมคุณกำลังใช้เช่นรุ่นเก่า Maven ซึ่งเป็นที่กำหนดไว้แล้วที่หมดอายุ
khmarbaise

1
ดังนั้นมันเป็นความจริงจริงๆที่จะสมบูรณ์ข้ามการทดสอบทุกอย่างที่เกี่ยวข้องฉันต้องใช้-Dmaven.test.skip=true -DskipTests? หนึ่งหรืออื่น ๆ บางครั้งสามารถละเว้นขึ้นอยู่กับสถานการณ์ แต่ผู้ที่ต้องการที่จะคิดเกี่ยวกับว่า ..
แลน Kuhn

คำตอบ:


120

ดังที่คุณได้กล่าวไว้ให้-Dmaven.test.skip=trueข้ามการรวบรวมการทดสอบ ยิ่งไปกว่านั้นมันข้ามการสร้างสิ่งประดิษฐ์ทดสอบ การปฏิบัติทั่วไปสำหรับโครงการขนาดใหญ่คือการทดสอบยูทิลิตี้และคลาสพื้นฐานที่ใช้ร่วมกันระหว่างโมดูลในโครงการเดียวกัน

สิ่งนี้สามารถทำได้โดยการมีโมดูลต้องการtest-jarของโมดูลที่สร้างขึ้นก่อนหน้านี้:

<dependency>
  <groupId>org.myproject.mygroup</groupId>
  <artifactId>common</artifactId>
  <version>1.0</version>
  <type>test-jar</type>
  <scope>test</scope>
</dependency>

หากระบุ-Dmaven.test.skip=true(หรือเพียง-Dmaven.test.skip) test-jars จะไม่ถูกสร้างขึ้นและโมดูลใด ๆ ที่ใช้งานได้จะไม่สามารถสร้างได้

ในทางตรงกันข้ามเมื่อคุณใช้-DskipTestsMaven จะไม่เรียกใช้การทดสอบ แต่จะรวบรวมและสร้าง test-jar เพื่อให้พร้อมใช้งานสำหรับโมดูลที่ตามมา


2
วิธีแก้ปัญหานี้ ในฐานะที่เป็นคำสั่ง maven ออนไลน์ของฉันใช้ -Dmaven.test.skip
ดาวเนปจูน

2
@ เนปจูนมีปัญหาอะไร? หากคุณมีคำถามใหม่โปรดใช้โพสต์ใหม่เพื่อถาม
Mureinik

58

ฉันมีการพึ่งพาระหว่างกันกับการทดสอบเพื่อสร้างแพ็คเกจ

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

mvn -DskipTests=true  package

29

มีความแตกต่างระหว่างแต่ละพารามิเตอร์

  • -DskipTests ข้ามขั้นตอนการทดสอบการรันหมายความว่าเมื่อสิ้นสุดกระบวนการนี้คุณจะต้องรวบรวมการทดสอบของคุณ

  • กระบวนการ -Dmaven.test.skip = true ข้ามการคอมไพล์และรันการทดสอบ

ในฐานะที่เป็นพารามิเตอร์ -Dmaven.test.skip = true ข้ามการรวบรวมคุณไม่ได้มีการทดสอบสิ่งประดิษฐ์

สำหรับข้อมูลเพิ่มเติมเพียงอ่านเอกสารโต้คลื่น: http://maven.apache.org/plugins-archives/maven-surefire-plugin-2.12.4/examples/skipping-test.html


15

ฉันสามารถให้คุณตัวอย่างซึ่งผลลัพธ์ที่มีปัญหาเดียวกัน แต่อาจไม่ให้คำตอบสำหรับคำถามของคุณ (นอกจากนี้ในตัวอย่างนี้ฉันใช้ความรู้ Maven 3 ซึ่งอาจไม่สามารถใช้กับ Maven 2 ได้)

ในโครงการ Maven หลายโมดูล (ที่มีโมดูลAและBที่Bขึ้นอยู่กับA) คุณสามารถเพิ่มนอกจากนี้ยังมีการพึ่งพาการทดสอบบนจากAB

การพึ่งพานี้อาจมีลักษณะดังนี้:

<dependency>
     <groupId>com.foo</groupId>
     <artifactId>A</artifactId>
     <type>test-jar</type> <!-- I'm not sure if there is such a thing in Maven 2, but there is definitely a way to achieve such dependency in Maven 2. -->
     <scope>test</scope>
</dependency>

(สำหรับข้อมูลเพิ่มเติมอ้างถึงhttps://maven.apache.org/guides/mini/guide-attached-tests.html )
โปรดทราบว่าโครงการAสร้างสิ่งประดิษฐ์รองด้วยตัวจำแนกประเภทtestsที่มีคลาสการทดสอบและแหล่งข้อมูลการทดสอบ

หากคุณสร้างโครงการด้วย-Dmaven.test.skip=trueคุณจะได้รับข้อผิดพลาดในการแก้ปัญหาการพึ่งพาตราบใดที่ไม่พบสิ่งประดิษฐ์ทดสอบใน repo ในพื้นที่ของคุณหรือที่เก็บข้อมูลภายนอก เหตุผลก็คือคลาสการทดสอบไม่ได้รวบรวมหรือสร้างtestsสิ่งประดิษฐ์
อย่างไรก็ตามหากคุณเรียกใช้งานบิลด์ด้วยสิ่งประดิษฐ์-DskipTestsของคุณtestsจะถูกสร้างขึ้น (แม้ว่าการทดสอบจะไม่ทำงาน) และการอ้างอิงจะได้รับการแก้ไข


10

ในการข้ามกรณีทดสอบในระหว่างการติดตั้ง maven clean i ใช้ -DskipTests พารามิเตอร์ในคำสั่งต่อไปนี้

mvn clean install -DskipTests

เข้าไปในหน้าต่างเทอร์มินัล



1

ระหว่างการรวบรวม maven คุณสามารถข้ามการทดสอบการทำงานได้โดยการเพิ่มปลั๊กอินต่อไปนี้ใน pom.xml

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-surefire-plugin</artifactId>
    <version>2.20.1</version>
    <configuration>
         <skipTests>true</skipTests>
    </configuration>
</plugin>

1
มันข้ามการทดสอบแม้ในขณะที่คุณทำmvn test
Pratik Singhal
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.