คุณจะพึ่งพาโค้ดทดสอบจากโมดูลอื่นใน Maven ได้อย่างไร
ตัวอย่างฉันมี 2 โมดูล:
- ฐาน
- หลัก
ฉันต้องการกรณีทดสอบใน Main เพื่อขยายคลาสทดสอบพื้นฐานใน Base เป็นไปได้ไหม
อัปเดต: พบคำตอบที่ยอมรับได้ซึ่งเกี่ยวข้องกับการสร้างขวดทดสอบ
คุณจะพึ่งพาโค้ดทดสอบจากโมดูลอื่นใน Maven ได้อย่างไร
ตัวอย่างฉันมี 2 โมดูล:
ฉันต้องการกรณีทดสอบใน Main เพื่อขยายคลาสทดสอบพื้นฐานใน Base เป็นไปได้ไหม
อัปเดต: พบคำตอบที่ยอมรับได้ซึ่งเกี่ยวข้องกับการสร้างขวดทดสอบ
คำตอบ:
ผมขอแนะนำให้ใช้ชนิดแทนการจําแนก (ดูเพิ่มเติมที่: ลักษณนาม ) มันบอก Maven ให้ชัดเจนยิ่งขึ้นว่าคุณกำลังทำอะไรอยู่ (และฉันได้พบว่า m2eclipse และ q4e ทั้งสองอย่างมันดีกว่า)
<dependency>
<groupId>com.myco.app</groupId>
<artifactId>foo</artifactId>
<version>1.0-SNAPSHOT</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
ขอบคุณสำหรับคำแนะนำโมดูลฐาน อย่างไรก็ตามฉันไม่ต้องการสร้างโมดูลใหม่เพื่อจุดประสงค์นี้
พบคำตอบที่ได้รับการยอมรับในเอกสาร Surefire Mavenและบล็อก ดูเพิ่มเติมที่ " วิธีสร้างโถที่มีคลาสทดสอบ "
สิ่งนี้สร้างไฟล์ jar ของรหัสจากการsrc/test/java
ใช้ปลั๊กอิน jarเพื่อให้โมดูลที่มีการทดสอบสามารถแชร์โค้ดได้
<project>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<goals>
<goal>test-jar</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
ในการใช้ JAR สำหรับการทดสอบที่แนบมาซึ่งสร้างขึ้นด้านบนคุณเพียงแค่ระบุการขึ้นต่อกันของส่วนหลักด้วยตัวแยกประเภทของการทดสอบที่ระบุ:
<project>
...
<dependencies>
<dependency>
<groupId>com.myco.app</groupId>
<artifactId>foo</artifactId>
<version>1.0-SNAPSHOT</version>
<type>test-jar</type>
<scope>test</scope>
</dependency>
</dependencies>
...
</project>
เราแก้ไขปัญหานี้โดยการสร้างโครงการ maven ด้วยรหัสทดสอบเป็น src / main / java และเพิ่มการพึ่งพาโครงการต่อไปนี้:
<dependency>
<groupId>foo</groupId>
<artifactId>test-base</artifactId>
<version>1</version>
<scope>test</scope>
</dependency>
ใช่ ... เพียงแค่รวมโมดูลฐานเป็นการพึ่งพาในหลัก หากคุณรับรหัสทดสอบเท่านั้นคุณสามารถใช้ขอบเขตแท็กเพื่อให้แน่ใจว่า Maven ไม่รวมรหัสในส่วนของคุณเมื่อปรับใช้ สิ่งนี้ควรใช้งานได้:
<dependency>
<groupId>BaseGroup</groupId>
<artifactId>Base</artifactId>
<version>0.1.0-SNAPSHOT</version>
<scope>test</scope>
</dependency>