• 派生于泛型基类的实现类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 的构造函数中。

  • 相关阅读:
    BZOJ5321 JXOI2017加法(二分答案+贪心+堆+树状数组)
    BZOJ5089 最大连续子段和(分块)
    Codeforces 893F(主席树+dfs序)
    BZOJ5092 分割序列(贪心)
    Codeforces Round #525 Div. 2 自闭记
    364. Nested List Weight Sum II
    362. Design Hit Counter
    369. Plus One Linked List
    370. Range Addition
    366. Find Leaves of Binary Tree
  • 原文地址:https://www.cnblogs.com/chriskwok/p/1225182.html
Copyright © 2020-2023  润新知