มีความแตกต่างและข้อ จำกัด ในตัวเลือกที่เสนอโดย @Steve C และ @ ashosborne1 พวกเขาต้องระบุฉันเชื่อ
เมื่อเราสามารถสามารถใช้: File resourcesDirectory = new File("src/test/resources");
?
- 1 เมื่อการทดสอบจะถูกเรียกใช้ผ่าน maven เท่านั้น แต่ไม่ผ่าน IDE
- 2.1 เมื่อการทดสอบจะถูกเรียกใช้ผ่านทาง Maven หรือ
- 2.2 ผ่าน IDE และมีเพียงโครงการเดียวที่นำเข้าสู่ IDE (ฉันใช้คำว่า "นำเข้า" ทำให้ใช้ใน IntelliJ IDEA ฉันคิดว่าผู้ใช้ eclipse ยังนำเข้าโครงการ maven ด้วย) สิ่งนี้จะใช้งานได้ทำให้ไดเรกทอรีทำงานเมื่อคุณเรียกใช้การทดสอบผ่าน IDE จะเหมือนกับโครงการของคุณ
- 3.1 เมื่อการทดสอบจะถูกเรียกใช้ผ่านทาง Maven หรือ
- 3.2 ผ่าน IDE และมีการนำเข้ามากกว่าหนึ่งโครงการใน IDE (เมื่อคุณไม่ใช่นักเรียนคุณมักจะนำเข้าหลายโครงการ) และก่อนที่คุณจะรันการทดสอบผ่าน IDE คุณจะกำหนดไดเรกทอรีทำงานสำหรับการทดสอบของคุณด้วยตนเอง ไดเรกทอรีการทำงานนั้นควรอ้างถึงโครงการนำเข้าของคุณที่มีการทดสอบ โดยค่าเริ่มต้นไดเรกทอรีการทำงานของโครงการทั้งหมดที่นำเข้าสู่ IDE เป็นเพียงโครงการเดียว อาจเป็นข้อ จำกัด
IntelliJ IDEA
เพียงอย่างเดียว แต่ฉันคิดว่า IDE ทั้งหมดทำงานเช่นนี้ และการกำหนดค่าที่ต้องทำด้วยตนเองนี้ไม่ดีเลย การทำงานกับการทดสอบหลายอย่างที่มีอยู่ในโครงการ maven ที่แตกต่างกัน แต่นำเข้าสู่โครงการ "IDE" ขนาดใหญ่หนึ่งโครงการบังคับให้เราจดจำสิ่งนี้และไม่อนุญาตให้ผ่อนคลายและเพลิดเพลินกับงานของคุณ
โซลูชันที่เสนอโดย @ ashosborne1 (โดยส่วนตัวแล้วฉันชอบสิ่งนี้) ต้องมีข้อกำหนดเพิ่มเติม 2 ข้อที่ต้องทำก่อนที่คุณจะทำการทดสอบ นี่คือรายการของขั้นตอนในการใช้วิธีแก้ไขปัญหานี้:
สร้างโฟลเดอร์ทดสอบ (“ teva”) และไฟล์ (“ readme”) ภายใน“ src / test / resources /”:
src / test / ทรัพยากร / Teva / README
ไฟล์จะต้องสร้างขึ้นในโฟลเดอร์ทดสอบมิฉะนั้นจะไม่สามารถใช้งานได้ Maven ไม่สนใจโฟลเดอร์ว่าง
mvn clean install
อย่างน้อยหนึ่งครั้งสร้างโครงการผ่านทาง มันจะทำการทดสอบด้วย อาจจะเพียงพอที่จะรันเฉพาะคลาสการทดสอบ / วิธีการของคุณผ่าน maven โดยไม่ต้องสร้างโครงการทั้งหมด เป็นผลให้ทรัพยากรการทดสอบของคุณจะถูกคัดลอกลงในคลาสทดสอบนี่คือเส้นทาง:target/test-classes/teva/readme
หลังจากนั้นคุณสามารถเข้าถึงโฟลเดอร์โดยใช้รหัสที่เสนอโดย @ ashosborne1 (ขออภัยด้วยที่ฉันไม่สามารถแก้ไขรหัสนี้ภายในรายการได้อย่างถูกต้อง):
public static final String TEVA_FOLDER = "teva"; ...
URL tevaUrl = YourTest.class.getClassLoader().getResource(TEVA_FOLDER);
String tevaTestFolder = new File(tevaUrl.toURI()).getAbsolutePath();
ตอนนี้คุณสามารถรันการทดสอบผ่าน IDE หลาย ๆ ครั้งตามที่คุณต้องการ จนกว่าคุณจะเรียกใช้ mvn สะอาด มันจะวางโฟลเดอร์เป้าหมาย
การสร้างไฟล์ภายในโฟลเดอร์ทดสอบและเรียกใช้ maven เป็นครั้งแรกก่อนที่คุณจะรันการทดสอบผ่าน IDE เป็นขั้นตอนที่จำเป็น หากไม่มีขั้นตอนเหล่านี้หากคุณเพียงแค่สร้าง IDE ในแหล่งข้อมูลการทดสอบจากนั้นให้เขียนการทดสอบและเรียกใช้ผ่าน IDE เท่านั้นคุณจะพบข้อผิดพลาด การรันการทดสอบผ่าน mvn จะคัดลอกทรัพยากรการทดสอบไปยังเป้าหมาย / test-classes / teva / readme และพวกเขาสามารถเข้าถึงได้สำหรับ classloader
คุณอาจถามว่าทำไมฉันต้องนำเข้ามากกว่าหนึ่งโครงการ Maven ใน IDE และทำไมสิ่งที่ซับซ้อนมาก? สำหรับฉันแล้วหนึ่งในแรงจูงใจหลักคือการรักษาไฟล์ที่เกี่ยวข้องกับ IDA ให้ห่างจากโค้ด ฉันก่อนสร้างโครงการใหม่ใน IDE ของฉัน มันเป็นโครงการปลอมที่เป็นเพียงผู้ถือแฟ้มที่เกี่ยวข้องกับ IDE จากนั้นฉันก็นำเข้าโครงการ maven ที่มีอยู่แล้ว ฉันบังคับให้โครงการที่นำเข้าเหล่านี้เก็บไฟล์ IDEA ในโครงการปลอมต้นฉบับของฉันเท่านั้น ดังนั้นฉันไม่เห็นไฟล์ที่เกี่ยวข้องกับ IDE ระหว่างรหัส SVN ไม่ควรเห็นพวกเขา (ไม่เสนอให้กำหนดค่า svn / git ให้ละเว้นไฟล์ดังกล่าวโปรด) นอกจากนี้ยังสะดวกสบายมาก