Score:0

เรียกใช้การทดสอบสำหรับโมดูลโดยไม่ต้องมีการติดตั้งไซต์แบบเต็ม

ธง in

ฉันกำลังสร้างโมดูลแบบกำหนดเอง (สำหรับใช้ในหลายโปรเจกต์) ด้วยโค้ดที่อาศัยเนื้อหาจาก Drupal core และโมดูลของบุคคลที่สาม (เช่น การขยายคลาส การใช้อินเทอร์เฟซ การใส่คำอธิบายประกอบเป็นปลั๊กอิน ฯลฯ) ฉันต้องการเริ่มเขียนแบบทดสอบสำหรับพวกเขา โดยเริ่มต้นด้วยการทดสอบหน่วยแต่จนถึงตอนนี้ ทรัพยากรทั้งหมดชี้ไปที่การวางโมดูลในการติดตั้ง Drupal และทดสอบในการตั้งค่านั้น ราวกับว่าฉันกำลังใช้งานไซต์ Drupal เต็มรูปแบบ แม้แต่สำหรับการทดสอบหน่วย

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

สามารถทำได้หรือไม่? หรือการใส่รหัสโมดูลของฉันในการติดตั้ง Drupal เป็นวิธีเดียวที่จะทดสอบโมดูล Drupal จริงหรือ

Jaypan avatar
de flag
การทดสอบหน่วยไม่ได้บูตสแตรปทั้งระบบและทำงานเร็วมากการทดสอบเคอร์เนล การทดสอบการทำงาน และการทดสอบ JavaScript จำเป็นต้องมีการบู๊ตระบบและใช้เวลานานกว่านั้น
in flag
@Jaypan Yup ฉันทราบประเภทของการทดสอบและวิธีดำเนินการ คำถามก็เช่น "Drupal core และโมดูลของบุคคลที่สามสามารถเป็น 'การพึ่งพา dev' ได้หรือไม่ ดังนั้นฉันจึงสามารถตอบสนองการพึ่งพาโมดูลของฉันระหว่างการทดสอบและเรียกใช้การทดสอบหน่วยโดยไม่ต้องตั้งค่า Drupal ในลักษณะเหมือนไซต์"
Jaypan avatar
de flag
ไม่เชิงว่าคุณกำลังทดสอบโค้ดภายนอกแทนที่จะเป็นหน่วยโค้ดของคุณเอง ในกรณีนี้ คุณจะสร้างม็อค/สตับแทน ซึ่งเลียนแบบบริการที่คุณพยายามเรียกใช้: https://www.drupal.org/docs/automated-testing/phpunit-in-drupal/mocking-entities-and-services- ด้วย-phpunit-และ-mocks
Jaypan avatar
de flag
ฉันนำความคิดเห็นสองข้อสุดท้ายมารวมกันเป็นคำตอบที่ครอบคลุมมากขึ้นสำหรับคำถามเดิม
Score:2
ธง de

การทดสอบหน่วยไม่ได้บูตสแตรปทั้งระบบและทำงานเร็วมาก การทดสอบเคอร์เนล การทดสอบการทำงาน และการทดสอบ JavaScript จำเป็นต้องมีการบู๊ตระบบและใช้เวลานานกว่านั้น

ด้วยการทดสอบหน่วย คุณไม่ต้องประกาศการขึ้นต่อกันของรหัสต่างประเทศ เนื่องจากหน่วยทดสอบทดสอบชิ้นส่วนของรหัส ไม่ใช่รหัสต่างประเทศ หากเกิดข้อผิดพลาดในรหัสต่างประเทศ และรหัสที่กำลังทดสอบขึ้นอยู่กับรหัสนั้น การทดสอบจะล้มเหลว แม้ว่ารหัสที่กำลังทดสอบจะยังคงถูกต้องก็ตาม นี่อาจเป็นข้อผิดพลาดที่ผิดพลาด และนักพัฒนาอาจใช้เวลาพยายามหาสาเหตุว่าโค้ดของพวกเขาล้มเหลว แม้ว่าจะไม่เป็นเช่นนั้นก็ตาม

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

in flag
ฉันเข้าใจว่าฉันสามารถเลียนแบบการพึ่งพาได้ (เช่น บริการ การโต้แย้ง ฯลฯ)ฉันสงสัยมากขึ้นว่าเกิดอะไรขึ้นกับคลาสที่ประกาศใน `use` หรือคลาสที่ฉันขยาย หรืออินเทอร์เฟซที่ฉันกำลังใช้งาน หรือลักษณะเฉพาะที่ฉันใช้ ตัวอย่างเช่น ฉันสร้าง `PluginBase` ของปลั๊กอิน _extending_ core ฉันต้องทำอะไรเป็นพิเศษสำหรับการทดสอบเกี่ยวกับ 'PluginBase' หรือไม่ การทดสอบไปหา `PluginBase` หรือไม่ ฉันต้องการ `PluginBase` จริงหรือไม่ หรือฉันต้องใช้ `PluginBase` ปลอม? ฉันแค่ทดสอบตรรกะพื้นฐานบางอย่างในปลั๊กอินนั้น ไม่ใช่กลไกปลั๊กอินทั้งหมด
Jaypan avatar
de flag
ฉันขอแนะนำให้ดูตัวอย่างบางส่วนในแกนหลัก หรือเปิดตั๋วใหม่สำหรับคำถามของคุณ เนื่องจากฉันรู้สึกว่าคำถามเดิมได้รับคำตอบแล้ว นั่นคือการที่คุณใช้การจำลองเพื่อจัดการกับการพึ่งพาในการทดสอบหน่วย และในขณะที่โมดูลหลักกำลังทำเช่นนี้ ใช่แล้ว การประกาศ `use` จะทำงานได้ดี

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา