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

  • 相关阅读:
    Eclipse下,修改MAVEN 中央仓库地址,解决maven下载慢问题
    C语言中头文件string的用法
    Linux中变量$#,$@,$0,$1,$2,$*,$$,$?的含义
    Curl
    LDAP是什么
    Linux网络基本网络配置
    vim
    request,session,cookie的比较
    J2EE开发过程中遇到的问题
    实现弹出登录窗口
  • 原文地址:https://www.cnblogs.com/chriskwok/p/1225182.html
Copyright © 2011-2022 走看看