ทดสอบกับ JVM หรือไลบรารีหลายเวอร์ชันระหว่าง Maven build หรือไม่

บริบท

โดยพื้นฐานแล้ว ฉันมีไลบรารีที่ใช้ในหลายแอปพลิเคชันที่ทำงานบน java 6, java 7 และตอนนี้ java 8

ห้องสมุดยังต้องพึ่งพาห้องสมุดบุคคลที่สามที่น่าขนลุก (แต่มีประโยชน์มาก) (ซึ่งฉันจะไม่ตั้งชื่อ) - ห้องสมุดที่ไม่สนใจมากนักเกี่ยวกับความเข้ากันได้ของการส่งต่อ แอปพลิเคชันดังกล่าวยังใช้งานไลบรารีบุคคลที่สามนี้อย่างหนัก แต่ไม่สามารถอัปเดตเป็นเวอร์ชันล่าสุดได้เสมอไป ฉันคุ้นเคยกับมันแล้ว ดังนั้นฉันจึงมี "ถ้า" มากมายในโค้ดของฉันที่เกี่ยวข้องกับเรื่องไร้สาระ

ปัญหา

วันนี้ฉันพบกับปัญหาที่น่ารำคาญ: วิธีการบางอย่างในไลบรารีของบุคคลที่สามมีพฤติกรรมที่แตกต่างออกไปเมื่อทำงานใน java 7 และก่อนหน้าเมื่อทำงานใน java 8 และใหม่กว่า

การทดสอบหน่วยของฉันได้รับการออกแบบให้ครอบคลุมส่วนนี้ของโค้ดของฉัน และคงจะตรวจพบจุดบกพร่องหากเรียกใช้โดยใช้ชุดค่าผสมของ Java / Library ที่ถูกต้อง

คำถามที่ 1

ฉันจะบูรณาการอย่างดีในวงจรชีวิตการสร้าง maven และรันการทดสอบตามลำดับกับ java 6, java 7 และ java 8 ได้อย่างไร (ซึ่งหมายถึงความล้มเหลวหากการทดสอบใด ๆ ล้มเหลวด้วย jvm ใด ๆ )

คำถามที่ 2

เช่นเดียวกับข้างต้น แต่เพิ่มการรันตามลำดับอีกครั้งกับไลบรารีบุคคลที่สามแต่ละเวอร์ชันที่ "รองรับ"

(ซึ่งหมายถึงให้ชัดเจนว่าถ้าฉัน "สนับสนุน" เวอร์ชัน 6.11, 6.12, 6.13 และ 6.14 ของ lib นี้ด้วย java ทั้ง 3 เวอร์ชัน ฉันจะรัน 4*3=12 เท่าของการทดสอบหน่วยของฉัน)


person Cerber    schedule 17.12.2014    source แหล่งที่มา
comment
ฟังดูคล้ายกับงานสำหรับเซิร์ฟเวอร์รวมเช่น Jenkins (ประเภทงานที่มีการกำหนดค่าหลายรายการ)   -  person khmarbaise    schedule 17.12.2014
comment
ใช่ แต่ฉันอยากให้ maven ในตัวสามารถป้องกันไม่ให้ release:prepare ประสบความสำเร็จบน lib ที่ไม่ได้รับการตรวจสอบอย่างสมบูรณ์กับเมทริกซ์ทดสอบ   -  person Cerber    schedule 19.12.2014


คำตอบ (1)


ฉันมีปัญหาที่คล้ายกัน ฉันสร้างไลบรารีที่ควรทดสอบกับเวอร์ชันที่แตกต่างกัน (ทั้งหมดมีอยู่ใน maven central) ของไลบรารีอื่นและ (แต่นั่นสำคัญน้อยกว่า) jvm

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

ตามที่แนะนำ เซิร์ฟเวอร์การรวมส่วนใหญ่สนับสนุนการทดสอบเมทริกซ์ คุณสามารถใช้มันเพื่อจัดเตรียมไลบรารี่ทุกเวอร์ชันด้วยตนเอง (หากคุณรู้จักล่วงหน้า) ที่คุณต้องการทดสอบ ส่วนของไลบรารีควรจะทำได้ง่ายกว่ามากในการไล่ระดับ (แต่ยังไม่มีการสนับสนุนนอกกรอบ)

เกี่ยวกับจำนวนการทดสอบ: ใช่จะต้องรัน x * y ครั้ง หากโค้ดของคุณมีขนาดใหญ่ ให้ลองแยกส่วนที่ใช้ไลบรารีอื่นและรันเฉพาะส่วนเล็กๆ นี้ x ครั้งสำหรับแต่ละ jvm - มันจะเร็วขึ้นเล็กน้อย คุณสามารถทำการทดสอบเหล่านั้นพร้อมกันได้

ป.ล. : ฉันกำลังคิดที่จะเขียนปลั๊กอิน gradle หรืออย่างน้อยก็เป็น build-proof-of-concept แต่ฉันไม่คิดว่ามันจะเป็นเร็ว ๆ นี้ แต่ฉันเปิดรับผู้ร่วมให้ข้อมูลรายอื่น :)

person piotrek    schedule 18.12.2014
comment
ฉันต้องการให้ maven ในตัวสามารถป้องกันไม่ให้ release:prepare ประสบความสำเร็จบน lib ที่ไม่ได้รับการตรวจสอบความถูกต้องอย่างสมบูรณ์กับเมทริกซ์ทดสอบ แต่ฉันกำลังมองหางานมดอยู่เคียงข้างฉัน ;) - person Cerber; 19.12.2014
comment
ฉันกำลังคิดที่จะย้ายบิลด์ทั้งหมด (รวมถึงรีลีส) เพื่อไล่ระดับ มันอาจจะง่ายกว่าการต่อสู้กับมาเวน - person piotrek; 20.12.2014