派生于泛型基类的实现类VSTS生成的访问器无法调用基类的私有字段或方法

presenterTest.JPG
    从VSTS自动生成的上面访问器代码来看,已经有私有字段及方法的封装,实际在单元测试中的访问器能见到受测类的私有方法及字段(智能感知出得来),如基类的_ctlBillErrorTips,然而单元测试方法访问到_accessor._ctlBillErrorTips会报如下错误:System.MissingFieldException:  System.MissingFieldException: 未找到字段“XXXX.XXXXX.Layout.OutBillDetailViewPresenter._ctlBillErrorTips”
问题在于测试初始化代码(一般基类没有泛型的情况下这样没有问题)如下:
_privateObject = new PrivateObject(_target);   
_accessor = new BillDetailBaseViewPresenter_Accessor<IOutBillRepository, IOutBill, IOutBillItem, OutBillStatus>(_privateObject);
解决该问题的方法是把new PrivateObject改为如下:
_privateObject = new PrivateObject(_target, new PrivateType(_target.GetType().BaseType));
_accessor = new BillDetailBaseViewPresenter_Accessor<IOutBillRepository, IOutBill, IOutBillItem, OutBillStatus>(_privateObject);
换句话说,创建的PivateObject实例是基于父类的就OK了。

错误描述有段清楚的描述不可忽略:
System.ArgumentException:
未能找到指定的成员(XXXXXX)。可能需要重新生成专用访问器,或者该成员可能是私有成员并且是在基类上定义的。如果属于后一种情况,则需要将用来定义成员的类型传递到 PrivateObject 的构造函数中。

转载于:https://www.cnblogs.com/chriskwok/archive/2008/06/19/1225182.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值