我使用 Pex 和 Moles 进行低级单元测试,但我也在探索 MSpec 进行业务逻辑验证,并希望继续使用 Moles 来保持一致性。我认为问题在于 MSPec 使用匿名方法,因此无法应用 HostType("Moles") 属性。例如:
Because of = () =>
employeeList = EmployeeManager.GetUsersByRoles(rolesToLoad);
It should_return_a_list_of_employees = () =>
employeeList.ShouldNotBeNull();
我正在嘲笑“GetUsersByRoles”内部调用的角色提供程序,当我尝试通过 MSpec 运行此测试时,我收到标准“Moles 要求测试位于仪表化进程中”错误,并附有添加 [HostType("摩尔”)]我的测试方法。这里有任何解决方法或其他选项吗?
旁注:我已经下载了 MSMSpec.tt 并修改了它以包含生成的 VSTests 上的属性,但我希望能够通过其自己的运行程序或 TestDriven.net 直接运行 MSpec 测试,以便获得友好的输出对于 BA 和企业主。
解决方法是将匿名方法替换为非匿名方法。 Moling Mspec 基本上是不可能的。
Moles 无法绕过匿名方法。原因是这些方法必须是可寻址的、可绕行的。匿名方法不是隐式可寻址的,因为它们是在运行时生成和引用的。简而言之,您不能通过类调用匿名方法,因为它是,嗯......匿名的.
Moles 手册指出,“Moles 可用于绕过任何 .NET 方法,包括密封类型中的非虚拟方法和静态方法。”因此,在 Moles 使用反射来识别类成员的假设下进行操作是一个安全的选择。任何不能通过 delegate、Action 或 Func 调用的东西都不能被摩尔。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)