【问题标题】:Help with the Moles syntax for testing private method with generics使用 Moles 语法帮助使用泛型测试私有方法
【发布时间】:2011-09-07 21:03:59
【问题描述】:

我有一个方法的签名,看起来像这样: 私有 IEnumerable BuildCustomerUpdatePlan(List localCacheChangedCustomers, List crmChangedCustomers){}

当我查看 moled 对象时,如何调用方法和测试的语法 (IntelliSense) 让我非常困惑,每次试一试时,我都会遇到编译错误。我浏览了 MSFT 网站上提供的基本教程,但我根本不知道如何使用 Moles 测试私有方法或如何处理返回类型和多个参数。

不幸的是,我找不到其他好的 HOWTO 或线程来演示比仅使用吐出 INT 并接受 INT 的简单 Add() 方法更复杂的示例。 :(

提示?

【问题讨论】:

    标签: moles pex-and-moles


    【解决方案1】:

    在您的测试项目中,首先确保添加与被测组件相对应的 Moles 组件。您还需要添加被测组件的using 语句,并附加.Moles,这样您就可以使用被摩尔组件。

    Moles 将类和方法的名称更改为M[Original Class Name].[Original Method Name][typeof param1][typeof param2]... 的形式。在您的情况下,该方法的绕行可能看起来像MClass.BuildCustomerUpdatePlanListList = (List x, List y) => { [code]};。这定义了一个匿名方法,它接受两个Lists 作为参数,你可以在函数中放入任何想要的代码。只需确保在该匿名方法中返回 IEnumerable

    这是一个使用 Moles 绕道Directory.GetFiles 的示例:

    using System.IO.Moles;
    [assembly: MoledType(typeof(System.IO.Directory))]
    ...
        MDirectory.GetFilesStringString = (string x, string y) => new string[0];
    

    由于Directory 类是System.IO 的成员,因此我使用using System.IO.Moles; 来指定我想使用组合的成员。

    Moles 要求您指定 Moled 的类型:[assembly: MoledType(typeof(System.IO.Directory))] 完成这项工作。

    最后,Directory.GetFiles 将两个字符串作为参数,返回一个字符串数组。为了绕过该方法返回等效于未找到文件,moled 方法只返回new string[0]。如果您希望匿名方法中有多行,则需要大括号,并且如果不绕过 void 方法,则需要与原始方法返回的类型匹配的 return 语句。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      • 1970-01-01
      相关资源
      最近更新 更多