zoukankan      html  css  js  c++  java
  • 派生于泛型基类的实现类VSTS生成的访问器无法调用基类的私有字段或方法


        从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 的构造函数中。

  • 相关阅读:
    随笔之过账模版
    随笔之转移日记账
    模式窗口的处理方式
    生产领料的问题
    询问对话框,缓存用户设置
    AX2009 连接外部Orcal与SQL区别
    AX2012全新的批处理方式
    AX调用.dll
    AX在query中添加自己的函数
    Java通过代理上传文件到Azure blob
  • 原文地址:https://www.cnblogs.com/chriskwok/p/1225182.html
Copyright © 2011-2022 走看看