我需要通过接口动态创建假对象。这个假对象的每个方法和属性都应该抛出NotImplementedException。有没有简单的方法如何使用.NET反射API?
答案 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 assemblies或Reflection Emit。