如何从实例动态创建类型并修改某些或访问受保护的字段

本文关键字:访问 受保护 字段 修改 实例 动态 类型 创建 | 更新日期: 2023-09-27 18:33:01

我需要在我的域实体上模拟和测试一些行为。域实体将 Id 作为受保护字段。我的域实体上的某些行为使用该 ID 来确定该实体是新的还是脏的实体。那么我如何动态创建一个从域实体继承的类,以便我有权访问受保护的字段。类似于实体框架创建的代理。或者,如果有任何其他更好的方法来模拟并仍然测试域类上的函数。请参阅下面的示例代码:

public class Customer{
  public Id {get; protected set;}
  public bool SomeMethod(){
    //This method check if the Id == 0 then it's a new instance and if not then 
    //Old instance
  }
}
public void Test_SomeMethod(){
  var customer = Customer.GetInstance();
  //Test the Somemethod. By mocking that it's not a new instance
}

如何从实例动态创建类型并修改某些或访问受保护的字段

您可以随时使用Castle DynamicProxy项目来创建运行时代理:

  • http://docs.castleproject.org/Default.aspx?Page=DynamicProxy&NS=Tools&AspxAutoDetectCookieSupport=1

好吧,事实上,从他们的维基上检查这个声明:

Moq和Rhino Mocks都使用它来提供他们的嘲笑 能力。

你为什么不看看这些模拟框架(Moq和Rhino Mocks)?