2011-02-16 21 views
6

Test amacıyla OperationContext sınıfına uymak istiyoruz. Biz 'Mock' kullanıyoruz. Ancak OperationContext mühürlü bir sınıftır ve alay edilemez. Bu nedenle, bir dummy OperationContext nesnesini oluşturmaya çalışıyoruz. Ancak OperationContext yapıcısı, parametre olarak IContextChannel alır. IContextChannel'u tutmanın bir yolunu bilmek istiyoruz, böylece OperationContext yapıcısına iletilebilir.WCF Veri Hizmetleri: Mocking OperationContext

cevap

0

NetFX project, yalnızca bu tür bir şeye izin vermek için bir dizi sarıcı sınıfı ve arabirim içerir.

+0

Sarıcı sınıflarının isimlerini verebilir misiniz? Bağlantıdaki belgeleri göremedim. –

3

Genel öneri implement wcf services without referencing wcf içindir. bunu nasıl

Örnekler http://marcin.floryan.pl/blog/2012/01/do-we-really-need-wcfmock

Biz operationResponse referansı ile OperationContext bir başvuru yerini bulunmaktadır. OperationResponse, arayüzü olarak tanımlanmalı ve deposunda verilen örnekte olduğu gibi yapıcıya enjekte edilebilir. Test yöntemimiz şimdi biraz daha kısa ve daha okunabilir hale gelir.

Ve

Let en http://blogs.msdn.com/b/ploeh/archive/2006/12/04/integrationtestingwcfservices.aspx yılında

, bir an için, yetkilendirme gerçekleştirmek için ihtiyaç düşünün. , işlem uygulamalarınızın her birinde OperationContext.Current'ı doğrudan denetleyebilir, ancak bu endişeleri (yetkilendirmeyle birlikte karıştırılan işlemde uygulanan iş mantığı) olacaktır. doğru yolu ServiceAuthorizationManager bir sınıf türetmek sağlamak ve yetkilendirme için bu sınıfını kullanacak şekilde yapılandırabilirsiniz olacaktır. Bu Eğer birim test tutmak için izin senin operasyonun uygulamaları, ama belli ki, ayrıca yetkilendirme yöneticisi kendisi test etmek gerekir ve bunun entegrasyon test bu görevi başarmak için en kolay yolu olduğu ortaya çıktı ederim. Hala http://blogs.msdn.com/b/ploeh/archive/2008/06/28/unit-testing-duplex-wcf-services.aspx

bir öneri izleyin sahte gerekiyorsa

yapmanız gereken tek şey soyut bir ile çağrı toOperationContext.GetCallbackChannel değiştirmektir. .NET 3.5 günü, en kolay soyutlama aynı imzası Func, ama .NET 3.0 üzerinde ise, her zaman kendi benzer temsilci türü tanımlayabilirsiniz.

Alternatif son bir başvuru olarak WCFmock

#if DEBUG 
    using WebOperationContext = System.ServiceModel.Web.MockedWebOperationContext; 
#endif 

Eğer gelişiminde alay sürümünü kullanmak istiyorsanız bu örneğin kullanışlıdır ve üretimde daima WCF sürümünü kullanabilirsiniz.Hepsi bu kadar, sen bu takma adı tanımlanmış kez hiç mevcut hizmet uygulaması dokunmak gerekmez , hizmet OperationContext için http://blog.gfader.com/2010/08/how-to-unit-test-wcf-service.html

tüm görüşmelerinden

test edilecek hazır .Current.Channel.SessionId MockedOperationContext tarafından yakalanan olsun, ama sadece sizin testleriniz içinde OperationContext alay ile vardır. Normal ortamınızda bu MockedOperationContext, gerçek OperationContext için bir proxy görevi görür.

İlgili konular