通过接口创建假对象

时间:2012-02-17 15:54:17

标签: c# .net reflection

我需要通过接口动态创建假对象。这个假对象的每个方法和属性都应该抛出NotImplementedException。有没有简单的方法如何使用.NET反射API?

4 个答案:

答案 0 :(得分:7)

您可以使用模拟API,例如Moq。它专为单元测试中的模拟而设计,但它应该做你需要的。

答案 1 :(得分:2)

也许ImpromptuInterface可以提供帮助。

示例代码(从其主页复制)是:

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

答案 2 :(得分:1)

Castle Proxies是一个整洁的库,可以在运行时为接口生成代理对象。所有主要的模拟框架也都使用Castle Proxies。

学习曲线比使用Moq这样的东西更陡峭,但它可能更适合您的需求,因为Moq专门用于单元测试,所以API可能太“吵”了后。

答案 3 :(得分:-1)

我担心你唯一的解决办法是使用Reflection.Emit,这不是很简单:) 有关详情,请参阅C# Reflection: Emitting classes to existing assembliesReflection Emit