2011-09-07 58 views
0

我已经有了一个看起来像这样的方法的签名: 私人的IEnumerable BuildCustomerUpdatePlan(名单localCacheChangedCustomers,列表crmChangedCustomers){}帮助测试私有方法与仿制药的痣语法

当我看如何调用方法和测试它的语法(智能感知),对我来说绝对是令人困惑的,每当我给它一个镜头时,我都会遇到编译错误。我浏览了MSFT网站上提供的基本教程,但我根本没有得到如何使用Moles测试私有方法或如何处理返回类型和多个参数。

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

提示?

回答

0

在您的测试项目中,首先要确保您添加组件对应的组件被测一个痣,你还需要添加装配欠的using声明与.Moles测试附加这样你就可以使用moled组装。

痣发生变化的类和方法的形式M[Original Class Name].[Original Method Name][typeof param1][typeof param2]...的名字。在你的情况该方法的弯路可能看起来像MClass.BuildCustomerUpdatePlanListList = (List x, List y) => { [code]};。它定义需要一个匿名方法两个List s作为参数,你会把任何代码想要的功能。只要确保您使用该匿名方法返回IEnumerable

下面是使用摩尔绕行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成员。

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

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