0

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

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

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

尖端?

4

1 回答 1

0

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

Moles 将类和方法的名称更改为 form 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.IOusing System.IO.Moles;用来指定我想使用moled 程序集的成员的成员。

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

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

于 2011-09-08T14:37:30.603 回答