我有一个看起来像这样的方法的签名: private IEnumerable BuildCustomerUpdatePlan(List localCacheChangedCustomers,List crmChangedCustomers){}
当我查看moled对象时,如何调用方法并测试它的语法(IntelliSense)对我来说绝对令人困惑,每次我试一试,我都会遇到编译错误。我已经查看了MSFT网站上提供的基本教程,但我根本不了解如何使用Moles测试私有方法或如何处理返回类型和多个参数。
不幸的是,我一直无法找到其他好的HOWTO或线程来演示更复杂的样本,而不仅仅是使用一个简单的Add()方法来吐出INT并接受一个INT。 :(
提示?
答案 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方法,则需要使用大括号,返回语句与原始方法返回的类型相匹配。