帮助使用Moles语法来测试使用泛型的私有方法

时间:2011-09-07 21:03:59

标签: moles pex-and-moles

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

当我查看moled对象时,如何调用方法并测试它的语法(IntelliSense)对我来说绝对令人困惑,每次我试一试,我都会遇到编译错误。我已经查看了MSFT网站上提供的基本教程,但我根本不了解如何使用Moles测试私有方法或如何处理返回类型和多个参数。

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

提示?

1 个答案:

答案 0 :(得分:0)

在测试项目中,首先确保添加与待测装配相对应的Moles装配。您还需要添加using被测装配的声明,并附加.Moles,以便您可以使用已装配的装配。

Moles将类和方法的名称更改为M[Original Class Name].[Original Method Name][typeof param1][typeof param2]...形式。在您的情况下,该方法的绕道可能看起来像MClass.BuildCustomerUpdatePlanListList = (List x, List y) => { [code]};。这定义了一个匿名方法,该方法将两个List s作为参数,并且您将在函数中放置所需的任何代码。只需确保以匿名方法返回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;来指定我想使用程序集的moled成员。

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

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