fakeldap เป็นโมดูลงูหลามที่มีวิธีที่ง่ายที่จะเยาะเย้ยแบ็กเอนด์เซิร์ฟเวอร์ LDAP สำหรับ unittests ของคุณ & nbsp;. มันทำให้มันเป็นไปได้ที่จะกำหนดล่วงหน้าชุดของรายการไดเรกทอรีที่สามารถสอบถามหรือตั้งค่าคงที่ค่าตอบแทนให้กับ LDAP คำสั่ง จะทำหน้าที่เป็นลดลงแทนระดับ LDAPObject โมดูลหลาม LDAP จะดำเนินการส่วนหนึ่งของวิธีการที่ได้รับอนุญาตของชั้นนี้
โมดูลนี้จะดำเนินการระดับ MockLDAP ที่ทำหน้าที่เป็นทั้ง LDAPObject เช่นเดียวกับโมดูล LDAP ส่วนใหญ่ของรหัสและการออกแบบที่ได้รับจากการที่ยอดเยี่ยมปีเตอร์ Sagerson โมดูล django-auth-LDAP
การติดตั้ง
รับและติดตั้งรหัส:
& nbsp; คอมไพล์คอมไพล์โคลน: //github.com/30loops/fakeldap.git
& nbsp; cd fakeldap
& nbsp; หลาม setup.py ติดตั้ง
หากคุณต้องการคุณสามารถเรียกใช้การทดสอบ:
& nbsp; หลาม setup.py nosetests
การใช้งาน
หมายเหตุ: รหัสนี้ยังคงทดลองและไม่ได้ทดสอบมากยังเป็นของ ดังนั้นเอกสาร
ระดับ MockLDAP แทนที่ LDAPObject โมดูลหลาม LDAP วิธีที่ง่ายที่สุดที่จะใช้มันคือการเขียนทับ ldap.initialize จะกลับ MockLDAP แทน LDAPObject ตัวอย่างด้านล่างใช้ห้องสมุดจำลองไมเคิล Foord ที่จะประสบความสำเร็จที่:
นำเข้า UnitTest
นำเข้าจากแพทช์จำลอง
จากการนำเข้า fakeldap MockLDAP
_mock_ldap = MockLDAP ()
ระดับ YourTestCase (unittest.TestCase):
& nbsp; def ติดตั้ง (ตัวเอง):
& nbsp; # แพทช์ที่ห้องสมุด LDAP ที่ใช้:
& nbsp; self.ldap_patcher = แพทช์ (app.module.ldap.initialize)
& nbsp; self.mock_ldap = self.ldap_patcher.start ()
& nbsp; self.mock_ldap.return_value = _mock_ldap
& nbsp; def tearDown (ตัวเอง):
& nbsp; _mock_ldap.reset ()
& nbsp; self.mock_ldap.stop ()
วัตถุ LDAP จำลองการดำเนินการดังต่อไปนี้การดำเนินงาน LDAP:
- simple_bind_s
- search_s
- compare_s
- modify_s
- delete_s
- add_s
- rename_s
นี่คือตัวอย่างวิธีการใช้ MockLDAP มีค่าผลตอบแทนคงที่:
def test_some_ldap_group_stuff (ตัวเอง):
& nbsp; # กำหนดค่าตอบแทนที่คาดหวังสำหรับการดำเนินงาน LDAP
& nbsp; return_value = ("cn = testgroup อูกลุ่ม = dc = 30loops, dc = สุทธิ" {
& nbsp; 'objectClass': ['posixGroup']
& nbsp; 'CN': 'testgroup'
& nbsp; 'gidNumber': '2030'
& nbsp;})
& nbsp; # ลงทะเบียนค่าตอบแทนกับวัตถุ MockLDAP
& nbsp; _mock_ldap.set_return_value (add_s '
& nbsp; ("cn = testgroup อู = กลุ่ม dc = 30loops, dc = สุทธิ" (
& nbsp; (objectClass '(' posixGroup '))
& nbsp; (CN ',' testgroup ')
& nbsp; (gidNumber ',' 2030 '))),
& nbsp; (105, [], 10, []))
& nbsp; # เรียกใช้รหัสที่เกิดขึ้นจริงของคุณนี้เป็นเพียงตัวอย่าง
& nbsp; group_manager = GroupManager ()
& nbsp; ผล = group_manager.add ("testgroup")
& nbsp; # ยืนยันว่าค่าตอบแทนของวิธีการของคุณและ MockLDAP
& nbsp; # เป็นตามที่คาดไว้ที่นี่โดยใช้หลามจมูกของอีคิว () เครื่องมือทดสอบ:
& nbsp; eq_ (return_value ผล)
& nbsp; # แต่ละ LDAP จริงโทรซอฟแวร์ของคุณจะทำให้ได้รับการบันทึก คุณสามารถ
& nbsp; # เตรียมรายชื่อของสายที่คุณคาดว่าจะได้รับการออกและเปรียบเทียบ:
& nbsp; called_records = []
& nbsp; called_records.append (('simple_bind_s'
& nbsp; {'ที่': 'cn = admin, dc = 30loops, dc = สุทธิ', 'cred': 'ldaptest'}))
& nbsp; called_records.append (('add_s' {
& nbsp; 'DN': 'cn = testgroup อู = กลุ่ม dc = 30loops, dc = สุทธิ "
& nbsp; 'บันทึก': [
& nbsp; (objectClass '[' posixGroup '])
& nbsp; (gidNumber ',' 2030 ')
& nbsp; (CN ',' testgroup ')
& nbsp;]}))
& nbsp; # และอีกครั้งทดสอบพฤติกรรมที่คาดหวัง
& nbsp; eq_ (called_records, _mock_ldap.ldap_methods_called_with_arguments ())
นอกจากนี้การแก้ไขค่าตอบแทนสำหรับการโทรเฉพาะคุณยังสามารถเลียนแบบเซิร์ฟเวอร์ LDAP ไดเรกทอรีที่เต็มไปด้วยของรายการ:
# สร้างตัวอย่างของ MockLDAP กับไดเรกทอรีที่กำหนดไว้ล่วงหน้า
ต้นไม้ = {
& nbsp; "cn = admin, dc = 30loops, dc = สุทธิ": {
& nbsp; "userpassword": "ldaptest"
& nbsp;}
}
mock_ldap = MockLDAP (ต้นไม้)
บันทึก = [
& nbsp; (uid ',' ฯ ')
& nbsp; (userpassword ',' ความลับ ')
]
# ค่าตอบแทนที่ผมคาดหวังว่าเมื่อฉันจะเพิ่มบันทึกอีกไปยังไดเรกทอรี
eq_ (
& nbsp; (105, [], 1, [])
& nbsp; mock_ldap.add_s ("uid = ฯ อู = คน dc = 30loops, dc = สุทธิ" บันทึก)
)
# ไดเรกทอรีคาดว่า
ไดเรกทอรี = {
& nbsp; "cn = admin, dc = 30loops, dc = สุทธิ": {"userpassword": "ldaptest"},
& nbsp; "uid = ฯ อู = คน dc = 30loops, dc = สุทธิ": {
& nbsp; "uid": "ฯ ", "userpassword": "ความลับ"}
}
# เปรียบเทียบไดเรกทอรีที่คาดว่าจะมีไดเรกทอรี MockLDAP
eq_ (ไดเรกทอรี mock_ldap.directory)
ต้องการ
- งูใหญ่
ความคิดเห็นที่ไม่พบ