Mock ile ArcObjects nasıl test edilir?


10

Ben birim test büyük bir hayranıyım, ama yine de ArcObjects çerçeve kullanırken birim testleri çalıştırmak için özellikler kapmak için bir FGDB kullanın.

Herkes başarılı bir şekilde IFeature, IGeometry, IWorkspace vb. Gibi düşüncelere karşı alay kullanıyor mu? Hangi alaycı çerçeveyi kullandığınız umurumda değil , sadece bunu nasıl yaptığınızı görmek büyük beğeni topluyor.

Gördüğüm sorun, aynı nesne üzerinde çok fazla arayüz arasında dilimlemek ve zar atmak zorundasınız, temsili bir sahte nesne yaratma yükü çok büyük olacaktır.


Mocking (benim gibi) hakkında bilmeyen herkes için lütfen bu bağlantıya bakın. İlginç şeyler. stackoverflow.com/questions/300177/…
Simon

Yanıtlar:


14

Büyük bir projede, ArcObjects kodunu iş mantığımızdan izole etmeyi oldukça iyi başardık. Genelde bu, yolun bir kısmını elde etmek için alaycı çerçeveler kullanmak mümkün olsa bile, her şeyi alay etmeye çalışmaktan ziyade gitmenin yoludur.

Kendinize sorun, Neden alay etme gereğini hissediyorsunuz. Tipik olarak, eksik bir soyutlamadan kaynaklanır. Küçük sorumlulukları düşünün ve dev, çirkin ArcObject canavarının yüzeyini en aza indirin. ArcObject türlerinin etrafında sürüklemekten kaçının, çünkü bunların bazı yönleri bir yere ihtiyaç duyar.

Projemizden somut bir örnek verebilirim. Kodun bir kısmı IMxDocument'e bağlı görünüyordu. Bunun tek sebebi aktif görüntünün yenilenmesi gerektiğiydi. Bunun yerine bir IViewRefresher arayüzü oluşturduk ve sadece bunun üzerinde çalıştık; alay etmek ve test etmek kolay. Buna ek olarak, kodun amacını çok daha net hale getirir ve birisinin yapması gerekmeyen IMxDocument ile komik şeyler yapmaya başlaması cazibesini ortadan kaldırır, çünkü burada yapmak istediğimiz tek şey yenilendi. Aynı alıştırma bir çok ArcObjects koduyla da yapılabilir.

Ayrıca, güvenli sınıftaki tüm özellik sınıflarına tüm erişimi, yine ArcObjects'ten iş kodunu koruyan takılabilir kod sağlayarak tamamladık.

ArcObjects'in geometri türlerini bile kullanmadık, ancak şu anda bu arayüzlerin doğrudan kodumuzda kullanılmasına izin veriyoruz. (Ancak, arayüz bilgisine yalnızca izin verilir ve tüm geometri örneklerinde kendi geometri fabrikamız kullanılır.)

Özetle, alaycılığı engellemiyorum ama alaycı ArcObjects'ten farklı bir soyutlama düzeyinde teşvik ediyorum.


büyük cevap Cumbayah. Ayrıca AO kod test birim zorlukları bir sürü var. Verdiğiniz örnek harikaydı (IViewRefresher) ve bunu burada yaptığım işe uygulayabilirim. Başka örnekler verebilir misiniz?
George Silva

Teşekkürler Cumbayah. Şu anda orta ila büyük projelerde yaptığım şey, tüm AO uygulamalarını soyutlamak için ayrı bir montaj oluşturmak. Depolanmış verilere başvurmadan test etmek istediğim bu soyutlama, XML çalışma alanları veya coğrafi veri tabanları gibi. Farklı verilerle zaman zaman yeni sorunların ortaya çıktığını ve bunun için testlerin oluşturulması gerektiğini ve bu da ek test verileri gerektirdiğini görüyorum. Zamanla, tüm test senaryoları için o kadar çok test verim var ki, projeler yönetmek ve hareket etmek için büyük hale geliyor, otomatik derleme sunucum tarafından indirilebilelim.
BlinkyBill

Cumbayah, bu kulağa inanılmaz geliyor. Bazı örneklere bayılırım. Hiç ESRI konferanslarından birinde bu konuda bir şeyler sunmayı düşündünüz mü? Bence ESRI / GIS topluluğu bu tür şeyler için ölüyor. ArcObjects'i test etmek / alay etmek için bazı açık kaynak hareketlerinin başlamasını görmek isteriz.
Keith G

Bu anladığım eski bir konu ama "kendi geometri fabrikanızdan" bir örnek alma şansımız var mı? Kuruluşumu birim testi yönünde hareket ettirmeye çalışıyorum, ancak ArcObjects maymununa asılıyorum.
Luke

4

Dave Bouwman ve Brian Noyle tarafından Esri Geliştiricileri için Birim Testi, özellikle bakmak için bir kod attıkları için oldukça iyi bir başlangıç ​​yeridir .


İşaretçi için teşekkürler bwreilly. Dave'in yaptığı şey, özelliklerin XML temsillerini kullanmaktır. Bu yüzden yardımcı olurken, yine de testler için veri depolamaya dayanıyor, ki bundan kaçmaya çalışıyorum.
BlinkyBill
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.