通过接口创建假对象

本文关键字:对象 创建 接口 | 更新日期: 2023-09-27 18:25:10

我需要通过接口动态创建假对象。这个伪对象的每个方法和属性都应该只抛出NotImplementedException。有没有什么简单的方法可以只使用.NET反射API来实现?

通过接口创建假对象

您可以使用Moq这样的嘲弄API。它是为模拟单元测试而设计的,但它应该满足您的需要。

也许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>();
Castle Proxies是一个简洁的库,它在运行时为接口生成代理对象。所有主要的嘲讽框架也都在后台使用Castle Proxies。

学习曲线比使用Moq这样的东西更陡峭,但它可能更适合您的需求,因为Moq是专门用于单元测试的,因此API可能太"嘈杂",无法满足您的需求。

恐怕您唯一的解决方案是使用Reflection.Emit,这并不是很简单:)有关更多信息,请参见C#反射:将类发射到现有程序集或反射发射。