เรียกใช้การทดสอบหน่วยใน IntelliJ IDEA จากหลายโมดูลด้วยกัน


89

ฉันจะเรียกใช้การทดสอบทั้งหมดจากโมดูล IDEA สองโมดูลขึ้นไปพร้อมกันได้อย่างไร

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

คำตอบ:


115

วิธีที่ดีที่สุด: (แก้ไขหลังจาก 3 ปี)

ยังมีวิธีที่ดีกว่าในการบรรลุเป้าหมายนี้

  1. เลือกเมนู "เรียกใช้" → "แก้ไขการกำหนดค่า ... " คลิกบวกสีเขียวที่มุมบนซ้ายแล้วเลือก JUnit

  2. เลือก "Test kind" เป็น "Pattern" และป้อน regexp นี้ให้ตรงกับที่คุณเห็น: ^(?!.*IT$).*$(เริ่มต้นด้วยเครื่องหมายคาเร็ต^และลงท้ายด้วยดอลลาร์$) regexp นี้กล่าวว่าการทดสอบทั้งหมดที่ไม่ได้จบด้วยไอทีในชื่อของพวกเขา

  3. เลือก "ค้นหาการทดสอบ" เป็น "ในโครงการทั้งหมด" ไดเร็กทอรีการทำงานควรตั้งค่าเป็นไดเร็กทอรีการทำงานของโมดูลด้านบน (ควรตั้งค่าเป็นค่าเริ่มต้น)

  4. ป้อนชื่อสำหรับการทดสอบของคุณเช่น "การทดสอบทุกหน่วย" ฉันชอบที่จะทำเครื่องหมายตัวเลือก "แบ่งปัน" เพื่อไม่ให้การกำหนดค่านี้หายไปในภายหลัง คลิกใช้และตกลง

คุณสามารถทดลองใช้ regexp นี้เพื่อให้เหมาะกับความต้องการของคุณ

คำตอบเดิม:

ทำได้แม้ว่าจะไม่สะดวกสบาย

  1. เลือกโมดูลแรกคลิกขวาที่test/javaไดเร็กทอรีและ "Run All Tests" สร้างการกำหนดค่าการทดสอบ
  2. เลือก "แก้ไขการกำหนดค่า" และเลือก "แชร์" ในการกำหนดค่าที่สร้างขึ้นใหม่เพื่อที่จะได้รับการบันทึก
  3. เลือกโมดูลที่สอง "เรียกใช้การทดสอบทั้งหมด" จากนั้นเลือก "แชร์" ในการกำหนดค่านี้ด้วย
  4. ในส่วน "ก่อนเปิดตัว" คลิก "+" แล้วเลือก "เรียกใช้การกำหนดค่าอื่น" จากนั้นเลือกการกำหนดค่าโมดูลแรก

วิธีนี้คุณเรียกใช้การกำหนดค่าตามลำดับและการกำหนดค่าทุกรายการจะได้รับแท็บใหม่ ยังดีกว่าไม่มีอะไร


ขอบคุณ! โดยวิธีที่สะอาดที่สุด สงสัยว่าจะมีวิธีใดที่ดีกว่าในการบรรลุสิ่งนี้หลังจาก 3 ปี :)
CoderSpinoza

ขอบคุณ! คุณประหยัดเวลาของฉันและนี่ยังคงเป็นวิธีที่ชาญฉลาดที่สุดที่ฉันสามารถพบได้ในการแก้ไขทั้งการสร้างรายงานความครอบคลุมหลายฉบับและปัญหาเคสรันเนอร์แบบรวมในนัดเดียว
เฟ

ฉันเพิ่งแก้ไข anser ของฉันด้วยวิธีแก้ปัญหาที่ดีกว่า @CoderSpinoza
Tomasz Kalkosiński

11
เวอร์ชันที่อัปเดตนั้นไม่ค่อยดีนักหากกรณีทดสอบของคุณใช้ทรัพยากรเฉพาะของโมดูลในช่วงรันไทม์ฉันยังคงต้องการโซลูชันดั้งเดิมมากกว่า
เฟ

ฉันจะตั้งค่าคอนฟิกนี้ให้สอดคล้องกับ Gradle dependencies ได้อย่างไร ตอนนี้ล้มเหลวในคลาสที่หายไปจาก Guava เมื่อเรียกใช้การทดสอบของโมดูลเดียวจะทำงานได้ดี
Jorn

22

คุณต้องสร้าง "Run Configuration":

  1. ไปที่เมนูแบบเลื่อนลงที่ด้านบนทางขวามือของปุ่ม "สร้าง" แล้วคลิกที่ปุ่ม
  2. เลือก "แก้ไขการกำหนดค่า"
  3. ตอนนี้คลิกที่ปุ่ม "+" เพื่อเพิ่มการกำหนดค่าการรันใหม่และเลือก JUnit
  4. จากนั้นเมื่อกำหนดค่า "Run Configuration" คุณจะพบเมนูแบบเลื่อนลง "Test Kind" ให้เลือก "All class in directory"
  5. เลือกไดเร็กทอรีที่คุณต้องการใช้เป็นรูทคุณสามารถเลือกไดเร็กทอรีระดับบนสุดสำหรับโปรเจ็กต์ของคุณหรือไดเร็กทอรีใด ๆ สำหรับโมดูลของคุณ
  6. เลือกโมดูล IntelliJ จากจุดที่หยิบพา ธ คลาส (อาจเป็นโปรเจ็กต์ระดับบนสุดหากมีคลาสพา ธ )

ขอบคุณสำหรับเคล็ดลับแม้ว่าจะไม่สามารถแก้ปัญหาได้ วิธีที่ดีที่สุดคือการเลือก dirs หลาย ๆ อันไม่ใช่แค่อันเดียว วิธีแก้ปัญหาที่เกี่ยวข้องคือการใช้รูปแบบ แต่ยังอาจเป็นเพียงรูปแบบของแพ็คเกจเท่านั้นไม่ใช่ dirs ...
Wojtek Erbetowski

15
ใน "Test Kind" ให้เลือก "All in package" จากนั้นเลือกช่องทำเครื่องหมาย "In whole project" ซึ่งจะเรียกใช้การทดสอบในโมดูลทั้งหมด
Martin Odhelius

5
ฉันต้องการให้แต่ละโมดูลทำงานโดยมีโมดูล dir ของตัวเองเป็นไดเร็กทอรีการทำงานซึ่งดูเหมือนจะเป็นไปไม่ได้เลยดูเหมือนว่าจะใช้โมดูล dir เดียวสำหรับสิ่งทั้งหมด
bacar

@MartinOdhelius นั่นคือทางออกที่สะอาดที่สุดจนถึงตอนนี้
Hemil

10

เลือกโมดูลทั้งหมดคลิกขวาแล้วเลือกเรียกใช้การทดสอบทั้งหมด สิ่งนี้จะสร้างการกำหนดค่าที่เรียกว่า"Whole Project"ซึ่งคุณสามารถเรียกใช้อีกครั้งได้ตลอดเวลา

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

เลือกโมดูลทั้งหมด

เลือกโมดูลทั้งหมด

คลิกขวาและเลือกเรียกใช้การทดสอบทั้งหมด

คลิกขวาและเลือกเรียกใช้การทดสอบทั้งหมด

รับการกำหนดค่าการรันใหม่

รับการกำหนดค่าการรันใหม่


การเลือกโมดูลมากกว่าหนึ่งโมดูลในขั้นตอนแรกก็เพียงพอแล้ว
user7610

2
ในความคิดของฉันนี่ควรเป็นคำตอบที่ยอมรับได้ การจองเพียงอย่างเดียวที่ฉันมีคือการใช้คำว่า "ง่ายที่สุด" น่าเสียดายที่ไม่มีอะไรง่ายเกี่ยวกับการเรียกใช้การกำหนดค่าด้วย Intellij มีหลายวิธีในการทำงานง่ายๆด้วยการกำหนดค่าและโดยปกติจะมีเพียงวิธีเดียวเท่านั้นหากเป็นงานใด ๆ ดังนั้นงานของคุณมักจะวนซ้ำตัวเลือกต่างๆทั้งหมดเพื่อค้นหาตัวเลือกที่ใช้ได้ ไม่ง่ายเลย
David Sackstein

การดำเนินการนี้จะเรียกใช้การทดสอบทั้งหมดในโครงการ (ทั้งโครงการ) แม้ว่าฉันจะเลือกโมดูลเพียงเล็กน้อยก็ตาม นี่ไม่ใช่สิ่งที่ฉันต้องการ ในกรณีของฉันโมดูลทั้งหมดฉันต้องการเรียกใช้การทดสอบเพื่อแชร์แพ็คเกจทั่วไปดังนั้นฉันจึงสามารถแก้ไขการกำหนดค่า 'โครงการทั้งหมด' ที่เป็นผลลัพธ์และเพิ่มแพ็คเกจซึ่งจะกรองเพื่อเรียกใช้การทดสอบสำหรับส่วนย่อยของโมดูลเท่านั้น
Albert Vila Calvo

5

สำหรับฉันวิธีแก้ปัญหาทั้งสองไม่ได้ผลหรือไม่ได้ผล

สำหรับฉันฉันมี 3 โมดูล การพึ่งพาโมดูลของฉันมีลักษณะเช่นนี้

การนำเสนอ -> โดเมน -> ข้อมูล

ฉันแค่ต้องการดำเนินการทดสอบทั้งหมดด้วยกัน ดังนั้นฉันจึงคิดแนวทาง 'ข้ามโมดูลการพึ่งพา'

การตั้งค่าของฉันมีลักษณะดังนี้:

ใส่คำอธิบายภาพที่นี่


2

สิ่งนี้ใช้ได้ผลสำหรับฉันสำหรับโครงการที่มีหลายโมดูล

สร้างคอนฟิกูเรชัน JUnit run / debug ใหม่ ประเภทการทดสอบ: 'ทั้งหมดในแพ็คเกจ' ค้นหาการทดสอบ: 'โครงการทั้งหมด'

คุณจะต้องระบุไดเร็กทอรีการทำงานด้วย


นั่นคือสิ่งที่ฉันทำเช่นกัน
miva2

1

อีกกรณีหนึ่งที่ไม่ชัดเจนคือเมื่อจำเป็นต้องมีการครอบคลุมรหัสในโครงการมากกว่าหนึ่งโครงการ วิธีแก้ปัญหาที่ไร้เดียงสาคือการเลือกหลายโครงการและดำเนินการทดสอบหน่วยทั้งหมดในครั้งเดียว ปรากฎว่าการทดสอบหน่วยอาจล้มเหลวหาก classpath เปลี่ยนแปลงและ IntelliJ มีรายการ classpath เพียงรายการเดียวต่อการกำหนดค่าการรัน ในกรณีนี้การเรียกใช้การทดสอบหน่วยในโครงการตามลำดับนั้นเพียงพอแล้ว นั่นเป็นเพราะในตอนท้ายของการรัน IntelliJ (2017.2.5 Community Edition) แต่ละครั้งจะถามว่าควรแทนที่ความครอบคลุมที่รวบรวมหรือควรเพิ่มในสถิติความครอบคลุมที่รวบรวมไว้ก่อนหน้านี้

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