F #: จะทดสอบโมดูลภายในจากโครงการอื่นได้อย่างไร?

Aug 19 2020

ฉันปฏิบัติตามแนวทางปฏิบัติ F # ที่ดีที่สุดจากเอกสาร. Net :

  • ฉันสร้างโครงการสำหรับแอปพลิเคชัน (คอนโซลไม่ใช่ไลบรารี)
  • ฉันสร้างโครงการสำหรับการทดสอบ (ด้วย Expecto แต่ไม่สำคัญ)

ปัญหา: โมดูลแอปพลิเคชันบางส่วนของฉันไม่ถูกเปิดเผยผ่านinternalคีย์เวิร์ด ดังนั้นฉันจึงไม่สามารถนำเข้าโมดูลเหล่านี้ในโครงการการทดสอบของฉันได้

=> ฉันจะทำการทดสอบหน่วยของโมดูลเหล่านี้ได้อย่างไร? ฉันควรลบการควบคุมการเข้าถึงภายในหรือไม่

ขอบคุณ!

คำตอบ

1 Abel Aug 19 2020 at 17:45

ในการทดสอบinternalคุณสามารถใช้InternalsVisibleToเพื่อทดสอบคลาสส่วนตัวคุณสามารถเชื่อมโยงไฟล์ในโครงการทดสอบของคุณได้ (เมื่อคุณอยู่ในกล่องโต้ตอบ "เพิ่มไฟล์" คุณสามารถเลือกลิงก์แทนการเปิด)

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

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

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