在MSpec中处理匿名方法时是否有设置[HostType(“Moles”)]的解决方法?

时间:2012-03-30 17:59:01

标签: moles mspec

我正在使用Pex和Moles进​​行低级单元测试,但我也在探索MSpec进行业务逻辑验证,并希望继续使用Moles来保持一致性。我认为问题是MSPec使用匿名方法,因此无法应用HostType(“Moles”)属性。例如:

Because of = () =>
   employeeList = EmployeeManager.GetUsersByRoles(rolesToLoad);

It should_return_a_list_of_employees = () =>
   employeeList.ShouldNotBeNull();

我正在嘲笑在“GetUsersByRoles”内部调用的Roles提供程序,当我尝试通过MSpec运行此测试时,我得到标准“Moles要求测试在一个检测过程中”错误,并添加[ HostType(“Moles”)]到我的测试方法。这里有解决方法或其他选项吗?

附注:我已经下载了MSMSpec.tt并对其进行了修改以在生成的VSTests上包含该属性,但我希望能够通过自己的跑步者或TestDriven.net直接运行MSpec测试,这样我就能得到对于BA和企业主的友好输出。

1 个答案:

答案 0 :(得分:1)

解决方法是将匿名方法替换为非匿名方法。 Moling Mspec基本上是不可能的。

Moles无法绕过匿名方法。原因是方法必须是可寻址的,绕道而行。匿名方法不可隐式寻址,因为它们是在运行时生成和引用的。简单地说,你不能通过类调用匿名方法,因为它是...... anonymous

Moles手册指出,“Moles可用于绕过任何.NET方法,包括密封类型中的非虚拟和静态方法。”因此,在假设Moles使用反射识别班级成员的情况下操作是一个安全的选择。无法通过委托,动作或Func调用的任何东西都不能被提出来。