ฉันสามารถรันการทดสอบหน่วย IntelliJ ในโปรเจ็กต์ Maven โดยไม่ต้องรันเป้าหมาย Maven อีกครั้งได้หรือไม่

ฉันมีโปรเจ็กต์ที่มีโครงสร้าง maven แบบลึก และกำลังประเมินการเปลี่ยนจาก Eclipse เป็น IntelliJ

ฉันได้นำเข้า pom.xml ระดับบนสุดแล้ว ฉันรู้ว่าฉันสามารถ:

  1. สร้างโครงการทั้งหมดโดยมีเป้าหมาย Maven (ฉันใช้ 'ทดสอบคอมไพล์' เพื่อสร้างคลาสทดสอบ)
  2. รันการทดสอบจากตัวดำเนินการทดสอบ IntelliJ ดูเหมือนว่าจะค้นหาคลาส/คลาสทดสอบจากโฟลเดอร์เป้าหมายของโปรเจ็กต์

อย่างไรก็ตาม ฉันต้องการเพียงเปลี่ยนการทดสอบหรือโค้ดที่อยู่ระหว่างการทดสอบ บันทึก และรันใหม่โดยไม่ต้องรัน maven test-compile อีกครั้งด้วยตนเอง (เหมือนที่ฉันทำกับ Eclipse) เป็นไปได้ด้วย IntelliJ หรือไม่

ฉันคิดว่าปัญหาคือการกระทำ 'Build Project' ของ IntelliJ ไม่ได้สร้างคลาสการทดสอบ (และคลาสอื่น ๆ ) ลงในโฟลเดอร์เป้าหมายที่ผู้ทดสอบดู


person pduncan    schedule 01.05.2020    source แหล่งที่มา
comment
ขั้นแรก คุณควรนำเข้าโปรเจ็กต์ทั้งหมดไปยัง IntelliJ หรือ Eclipse คุณสามารถรันการทดสอบอีกครั้ง (โดยคลิกที่การทดสอบ) หลังจากการเปลี่ยนแปลงโค้ดภายใน IDE (ทั้ง Eclipse/IntelliJ) ไม่เช่นนั้นจะมีบางอย่างผิดปกติ...นอกเหนือจากนั้นบิลด์ของคุณทำงานได้ดีบนบรรทัดคำสั่งธรรมดาหรือไม่   -  person khmarbaise    schedule 01.05.2020
comment
ฉันได้นำเข้าโครงการทั้งหมดไปยัง IntelliJ แล้ว ดูเหมือนว่าการรันการทดสอบอีกครั้งจะทำการทดสอบในสถานะเดิมเมื่อสร้างในคลาสเป้าหมาย/คลาสการทดสอบครั้งล่าสุด ที่จริงแล้วหากฉันสร้างโปรเจ็กต์ใหม่ มันจะล้างไฟล์ .class ออกจากเป้าหมาย และพยายามเรียกใช้การทดสอบอีกครั้งจะรายงานว่าไม่พบคลาส   -  person pduncan    schedule 01.05.2020
comment
มีบางอย่างผิดปกติจริงๆ...BTW: คุณใช้ IDEA เวอร์ชันใด   -  person khmarbaise    schedule 01.05.2020


คำตอบ (2)


หากคุณนำเข้าโปรเจ็กต์ Maven ใน IntelliJ IDEA คุณจะสามารถสร้างและรันการทดสอบจาก IDE แทน Maven ซึ่งเร็วกว่ามากเนื่องจากการคอมไพล์แบบเพิ่มหน่วย

ตรวจสอบให้แน่ใจว่า ตัวเลือกนี้ถูกปิดใช้งาน และใช้การกำหนดค่า JUnit Run/Debug อย่าเรียกใช้ maven เป้าหมาย

person CrazyCoder    schedule 01.05.2020
comment
ฉันปิดใช้งานตัวเลือกนั้นแล้วและกำลังใช้ IntelliJ Run/Debug ฉันรู้สึกจริงๆ ว่าปัญหาคือผู้ทดสอบกำลังมองหาเฉพาะ /target สำหรับคลาสการทดสอบและ IntelliJ build ทำให้พวกเขาอยู่ที่อื่น - person pduncan; 01.05.2020
comment
ผู้ทดสอบควรใช้ classpath แทนไดเร็กทอรีแบบฮาร์ดโค้ด เอาต์พุต IntelliJ IDEA ไม่ได้แชร์กับ Maven แต่เป็นเพราะการออกแบบ แต่ไม่ควรส่งผลกระทบต่อแอปและการทดสอบที่เขียนอย่างถูกต้องซึ่งไม่ต้องอาศัยตำแหน่งไดเร็กทอรีเอาต์พุต - person CrazyCoder; 01.05.2020
comment
โอเค... มีอะไรที่ฉันสามารถแก้ไขเพื่อดูว่าเหตุใดสิ่งนี้จึงไม่เกิดขึ้น - person pduncan; 01.05.2020
comment
ดู classpath ในบรรทัดคำสั่งของการทดสอบเมื่อคุณเริ่มต้นหากจาก IDE มันมีไดเร็กทอรีเอาต์พุตหรือไม่? ไดเร็กทอรีเอาต์พุตเหล่านี้มีไฟล์ .class และทรัพยากรที่จำเป็นหรือไม่ คลาสปรากฏในไดเร็กทอรีเอาต์พุตเหล่านี้หลังจากที่คุณใช้ Build | หรือไม่ สร้าง? มีการกำหนดค่าใด ๆ ในการทดสอบของคุณที่อ้างอิงไดเรกทอรี target อย่างชัดเจนหรือไม่ ตัวอย่างขั้นต่ำ สมบูรณ์ และตรวจสอบได้ ยินดีเป็นอย่างยิ่งหากคุณต้องการความช่วยเหลือที่นี่ - person CrazyCoder; 01.05.2020

ขอบคุณคำแนะนำจาก @CrazyCoder ฉันสามารถทำงานได้โดยทำตามขั้นตอนเหล่านี้ เนื่องจากฉันคิดว่าปัญหาคือสิ่งประดิษฐ์ Eclipse ที่ต่อสู้กับสิ่งประดิษฐ์ IntelliJ:

  1. ลบไฟล์ .classpath, .project และ .iml ทั้งหมดออกจากแผนผังโค้ดทั้งหมด
  2. ลบ .idea ออกจากราก - เราต้องเริ่มต้นใหม่อีกครั้ง
  3. เปิด pom.xml ระดับบนสุดใน IntelliJ
  4. หากจำเป็น ให้ดำเนินการ mvn compile (จำเป็นสำหรับฉันเนื่องจากมีแหล่งข้อมูลที่สร้างขึ้นบางส่วน)
  5. สร้างโครงการของคุณใหม่

หลังจากนี้ อย่าเปิดโปรเจ็กต์ของคุณใน Eclipse อีก!

person pduncan    schedule 01.05.2020
comment
นอกจากนี้ ครั้งหนึ่งฉันลงเอยด้วยการเปิด IntelliJ จากบรรทัดคำสั่ง และด้วยเหตุผลบางอย่างมันก็เปิดที่โฟลเดอร์หลัก ดังนั้นแทนที่จะเปิดที่ C:\dev\myProject กลับเปิดเป็น C:\dev ซึ่งหมายความว่ามีโฟลเดอร์การกำหนดค่า IntelliJ ที่สร้างขึ้น C:\dev\.idea เมื่อฉันปิดและเปิดอีกครั้งในตำแหน่งที่ถูกต้อง ดูเหมือนว่าจะใช้งานได้ แต่ฉันไม่สามารถรันการทดสอบได้อย่างน่าเชื่อถือจาก IDE เพราะบางพาธเกิดความสับสนในไฟล์ .iml วิธีแก้ไขคือการลบ C:\dev\.idea, C:\dev\myProject\.idea ไฟล์ *.iml ทั้งหมดออก แล้วเริ่มใหม่อีกครั้ง - person pduncan; 19.05.2020