2012-02-17 12 views
5

Necesito crear dinámicamente objeto falso por interfaz. Todos los métodos y propiedades de este objeto falso deberían simplemente lanzar NotImplementedException. ¿Hay alguna manera simple de hacerlo solo con .NET reflection API?Crear objeto falso por interfaz

+0

Parece que necesita utilizar bibliotecas falsas. ¿Por qué necesita tener clase con NotImplementedException? Quizás haya una mejor solución que usar burlas. – Archeg

+0

Tengo un ensamblaje con interfaces y una carpeta llena de ensamblajes que contiene clases que implementa esas interfaces. Por lo tanto, al iniciar la aplicación, estoy escaneando esta carpeta y registrando todas las interfaces con su implementación en el contenedor de Castle IoC. Pero faltan algunas implementaciones, por lo que necesito generar clases falsas que solo lanzarán excepciones para avisarme en tiempo de ejecución que falta algo. Es realmente una gran aplicación, así que no quiero crear estas clases falsas de forma manual. –

Respuesta

1

Castillo La representación es una biblioteca ordenada que genera objetos proxy para las interfaces en tiempo de ejecución. Todos los principales marcos burlones usan Castle Proxies también.

La curva de aprendizaje es más pronunciada que usar algo como Moq, pero puede ser más apropiado para sus necesidades ya que Moq está diseñado específicamente para pruebas unitarias, por lo que la API puede ser demasiado ruidosa para lo que usted hace re después.

+0

Castle Proxies parece estar funcionando bien. Gracias por esto. –

7

Puede utilizar una API de burla como Moq. Está diseñado para burlarse en pruebas unitarias, pero debe hacer lo que necesita.

2

Tal vez ImpromptuInterface puede ayudar.

Un código de ejemplo (copiado de su página de inicio) es:

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>(); 
Cuestiones relacionadas