2012-02-17 28 views
5

Dinamik olarak sahte nesneyi arayüzle oluşturmam gerekiyor. Bu sahte nesnenin her yöntemi ve özelliği yalnızca NotImplementedException öğesini atmalıdır. Sadece .NET yansıma API'sı ile nasıl yapılacağını basit bir yolu var mı?Arabirim ile sahte nesne oluşturma

+0

Sahte kitaplıkları kullanmanız gerektiği anlaşılıyor. NotImplementedException ile neden bir sınıfa sahip olmalısınız? Belki de alay kullanmaktan daha iyi bir çözüm var. – Archeg

+0

Arabirimler ve bu arabirimleri uygulayan sınıfları içeren derlemeler ile dolu bir derlemem var. Yani uygulama başlangıcında bu klasörü tararım ve uygulamalarıyla tüm arayüzleri Castle IoC konteynerine kaydederim. Ama bazı eksik uygulama var, bu yüzden eksik bir şey olduğunu çalışma zamanında bilmeme izin vermek için sadece istisna atmak olacak sahte sınıf oluşturmak gerekir. Bu gerçekten büyük bir uygulamadır, bu yüzden bu sahte sınıfları manuel olarak oluşturmak istemiyorum. –

cevap

1

Kale Proxies çalışma zamanında arayüzleri için vekil nesneleri üreten bir düzgün kütüphanesidir. Tüm büyük alay yapıları da Castle Proxy'leri kaputun altında kullanıyor.

Öğrenme eğrisi, Moq gibi bir şey kullanmaktan daha diktir, ancak Moq, birim sınama için özel olarak kullanılmak üzere tasarlandığından, gereksinimleriniz için daha uygun bir uyum olabilir, böylece API sizin için çok 'gürültülü' olabilir. sonra tekrar.

+0

Castle Proxies güzel çalışıyor gibi görünüyor. Bunun için teşekkürler. –

7

Moq gibi alay eden bir API kullanabilirsiniz. Birim testlerinde alay etmek için tasarlandı, ama ihtiyacınız olanı yapmalı.

2

Yardımcı olabilir. (Kendi ana kopyalanan)

bir örnek kod:

using ImpromptuInterface; 
    using ImpromptuInterface.Dynamic; 

    public interface IMyInterface{ 

     string Prop1 { get; } 

     long Prop2 { get; } 

     Guid Prop3 { get; } 

     bool Meth1(int x); 
    } 

    //Anonymous Class 
    var anon = new { 
      Prop1 = "Test", 
      Prop2 = 42L, 
      Prop3 = Guid.NewGuid(), 
      Meth1 = Return<bool>.Arguments<int>(it => it > 5) 
    } 

    IMyInterface myInterface = anon.ActLike<IMyInterface>();