我正在使用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和企业主的友好输出。
答案 0 :(得分:1)
解决方法是将匿名方法替换为非匿名方法。 Moling Mspec基本上是不可能的。
Moles无法绕过匿名方法。原因是方法必须是可寻址的,绕道而行。匿名方法不可隐式寻址,因为它们是在运行时生成和引用的。简单地说,你不能通过类调用匿名方法,因为它是...... anonymous 。
Moles手册指出,“Moles可用于绕过任何.NET方法,包括密封类型中的非虚拟和静态方法。”因此,在假设Moles使用反射识别班级成员的情况下操作是一个安全的选择。无法通过委托,动作或Func调用的任何东西都不能被提出来。