F #: จะทดสอบโมดูลภายในจากโครงการอื่นได้อย่างไร?
ฉันปฏิบัติตามแนวทางปฏิบัติ F # ที่ดีที่สุดจากเอกสาร. Net :
- ฉันสร้างโครงการสำหรับแอปพลิเคชัน (คอนโซลไม่ใช่ไลบรารี)
- ฉันสร้างโครงการสำหรับการทดสอบ (ด้วย Expecto แต่ไม่สำคัญ)
ปัญหา: โมดูลแอปพลิเคชันบางส่วนของฉันไม่ถูกเปิดเผยผ่านinternal
คีย์เวิร์ด ดังนั้นฉันจึงไม่สามารถนำเข้าโมดูลเหล่านี้ในโครงการการทดสอบของฉันได้
=> ฉันจะทำการทดสอบหน่วยของโมดูลเหล่านี้ได้อย่างไร? ฉันควรลบการควบคุมการเข้าถึงภายในหรือไม่
ขอบคุณ!
คำตอบ
ในการทดสอบinternal
คุณสามารถใช้InternalsVisibleTo
เพื่อทดสอบคลาสส่วนตัวคุณสามารถเชื่อมโยงไฟล์ในโครงการทดสอบของคุณได้ (เมื่อคุณอยู่ในกล่องโต้ตอบ "เพิ่มไฟล์" คุณสามารถเลือกลิงก์แทนการเปิด)
อย่างไรก็ตามตามที่ได้แสดงความคิดเห็นไปแล้วโดยทั่วไปคุณจะทดสอบเฉพาะอินเทอร์เฟซสาธารณะเท่านั้น แต่ในบางครั้งคุณต้องการแยกการทดสอบภายในที่ซับซ้อนเช่นกัน ตัวอย่างเช่นในไลบรารีรันไทม์. NET สิ่งนี้มักจะทำ (มีภายในที่ซับซ้อนจำนวนมาก) และใช้วิธีการเชื่อมโยงเป็นจำนวนมาก
เนื่องจากความเป็นส่วนตัวหมายถึงความเป็นส่วนตัวสำหรับชั้นเรียนและคุณจะไม่สามารถเข้าถึงสมาชิกดังกล่าวจากวิธีการขยายได้คุณจึงควรกำหนดสมาชิกดังกล่าวไว้ในชั้นเรียนส่วนตัวของตนเองในฐานะสมาชิกสาธารณะ ด้วยวิธีนี้เมื่อคุณเชื่อมโยงชั้นเรียนจะสามารถเข้าถึงได้และสมาชิกก็เช่นกัน แต่จะไม่สามารถเข้าถึงได้ในเวอร์ชันที่ใช้งานจริงของคุณ
ใช้เทคนิคนี้เท่าที่จำเป็นเนื่องจากจะเชื่อมโยงรายละเอียดส่วนตัวของคุณเข้ากับระบบทดสอบและคุณจะไม่มีอิสระในการเปลี่ยนแปลงการใช้งานภายใน