วิธีทดสอบยูนิต ArcObjects ด้วยการเยาะเย้ย


10

ฉันเป็นแฟนตัวยงของการทดสอบหน่วย แต่ยังใช้ FGDB เพื่อคว้าคุณสมบัติสำหรับการทดสอบหน่วยเมื่อใช้งานกรอบ ArcObjects

มีใครประสบความสำเร็จในการใช้การเยาะเย้ยคิดเช่น IFeature, IGeometry, IWorkspace ฯลฯ หรือไม่ถ้าใช่ฉันชอบที่จะดูตัวอย่างของวิธีการที่คุณทำ ฉันไม่สนใจว่าคุณใช้กรอบการเยาะเย้ยอะไรเพียงแค่ดูว่าคุณทำมันอย่างไรจะได้รับการชื่นชมอย่างมาก

ปัญหาที่ฉันเห็นคือคุณต้องฝืนและเป็นลูกเต๋าระหว่างอินเตอร์เฟสจำนวนมากบนวัตถุเดียวกันว่าค่าใช้จ่ายในการสร้างวัตถุจำลองที่เป็นตัวแทนนั้นใหญ่มาก


สำหรับคนอื่นที่ไม่ทราบเกี่ยวกับการเยาะเย้ย (เช่นฉัน) โปรดดูที่ลิงก์นี้ สิ่งที่น่าสนใจ stackoverflow.com/questions/300177/…
ไซมอน

คำตอบ:


14

เรามีโครงการขนาดใหญ่ที่จัดการได้ค่อนข้างดีในการแยกรหัส ArcObjects ออกจากตรรกะทางธุรกิจของเรา โดยทั่วไปแล้วฉันจะบอกว่าแทนที่จะพยายามที่จะเยาะเย้ยทุกอย่างแม้ว่ามันจะเป็นไปได้โดยใช้กรอบการเยาะเย้ยเพื่อให้ได้มา

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

ฉันสามารถยกตัวอย่างที่เป็นรูปธรรมจากโครงการของเรา ส่วนของรหัสดูเหมือนจะขึ้นอยู่กับ IMxDocument มันเปิดออกด้วยเหตุผลเพียงอย่างเดียวคือต้องรีเฟรชมุมมองที่ใช้งาน ดังนั้นเราจึงสร้างอินเทอร์เฟซ IViewRefresher แทนและทำงานบนมันเท่านั้น ง่ายต่อการเยาะเย้ยและทดสอบ นอกจากนี้มันทำให้เจตนาของรหัสชัดเจนขึ้นและกำจัดสิ่งล่อใจให้ใครบางคนเริ่มทำสิ่งที่ตลกด้วย IMxDocument ที่พวกเขาไม่ควรทำเพราะสิ่งที่เราต้องการทำที่นี่คือการรีเฟรช แบบฝึกหัดเดียวกันนี้สามารถทำได้ด้วยรหัส ArcObjects มากมาย

นอกจากนี้เราได้รวมการเข้าถึงคลาสฟีเจอร์ทั้งหมดใน wrapper Safe type อีกครั้งให้รหัสที่จำลองได้เพื่อป้องกันรหัสธุรกิจจาก ArcObjects

เราได้พูดคุยกันแล้วไม่ได้ใช้ ArcObjects ประเภทเรขาคณิต แต่ขณะนี้เราอนุญาตให้ส่วนต่อประสานเหล่านั้นถูกใช้โดยตรงในรหัสของเรา (อย่างไรก็ตามอนุญาตให้ใช้ความรู้ส่วนต่อประสานเท่านั้นและอินสแตนซ์รูปเรขาคณิตทั้งหมดใช้โรงงานรูปทรงเรขาคณิตของเราเอง)

โดยสรุปแล้วฉันไม่ได้เป็นคนล้อเลียนการเยาะเย้ย แต่ฉันขอแนะนำให้ล้อเลียนในระดับที่แตกต่างของนามธรรมกว่า ArcObjects


คำตอบที่ดี Cumbayah ฉันยังมีหน่วยทดสอบรหัส AO อีกมากมาย ตัวอย่างที่คุณให้นั้นยอดเยี่ยมมาก (IViewRefresher) และฉันอาจนำไปใช้กับงานของฉันที่นี่ คุณสามารถยกตัวอย่างเพิ่มเติมได้หรือไม่
George Silva

ขอบคุณ Cumbayah นี่คือสิ่งที่ฉันทำในโครงการขนาดกลางถึงขนาดใหญ่การสร้างแอสเซมบลีแยกต่างหากเพื่อสรุปการใช้งาน AO ทั้งหมด มันเป็นนามธรรมที่ฉันต้องการทดสอบโดยไม่ต้องหันไปใช้ข้อมูลที่เก็บไว้ไม่ว่าจะเป็นพื้นที่ทำงาน XML หรือฐานข้อมูลทางภูมิศาสตร์ของประเภทหนึ่งหรืออีกประเภทหนึ่ง ฉันพบว่าในบางครั้งที่มีข้อมูลที่แตกต่างกันปัญหาใหม่จะหมดไปซึ่งจำเป็นต้องมีการทดสอบที่สร้างขึ้นซึ่งจำเป็นต้องใช้ข้อมูลการทดสอบเพิ่มเติม เมื่อเวลาผ่านไปฉันมีข้อมูลการทดสอบจำนวนมากสำหรับทุกกรณีการทดสอบโครงการต่างๆมีขนาดใหญ่ในการจัดการและย้ายไปรอบ ๆ ปล่อยให้พร้อมดาวน์โหลดโดยเซิร์ฟเวอร์สร้างอัตโนมัติของฉัน
BlinkyBill

Cumbayah เสียงนี้น่าเหลือเชื่อ ฉันชอบตัวอย่างบางส่วน คุณเคยคิดที่จะนำเสนอบางสิ่งในหัวข้อนี้ในการประชุม ESRI หรือไม่? ฉันคิดว่าชุมชน ESRI / GIS กำลังจะตายเพราะเรื่องแบบนี้ ชอบที่จะเห็นการเคลื่อนไหวโอเพนซอร์สเริ่มต้นสำหรับการทดสอบ / การเยาะเย้ย ArcObjects
Keith G

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

4

การทดสอบหน่วยสำหรับผู้พัฒนา Esriโดย Dave Bouwman และ Brian Noyle เป็นจุดเริ่มต้นที่ค่อนข้างดีโดยเฉพาะอย่างยิ่งเมื่อพวกเขาโยนรหัสเพื่อดู


ขอบคุณสำหรับตัวชี้ bwreilly สิ่งที่เดฟทำก็แค่ใช้การเป็นตัวแทนของคุณสมบัติ XML ดังนั้นในขณะที่มันกำลังช่วย แต่ก็ยังต้องอาศัยการเก็บข้อมูลสำหรับการทดสอบซึ่งเป็นสิ่งที่ฉันพยายามหลีกเลี่ยง
BlinkyBill
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.