我正在编写一个测试控制器方法的spock单元测试。
被测控制器操作实例化一个新的域实例对象,并在保存之前对其调用验证。有没有模拟对 domainInstance.validate() 的调用,所以我可以让它返回我想要的任何东西?或者我是否必须隐藏这个实例并保存在服务方法后面才能实现这一点?
我这样做是因为在控制器单元测试的上下文中,不应涉及域对象的约束。我在其他地方进行了测试(显然是在 MyDomainClassTests 中)。如果我想将这些考虑在内,我的测试将是一个集成测试。
我正在编写一个测试控制器方法的spock单元测试。
被测控制器操作实例化一个新的域实例对象,并在保存之前对其调用验证。有没有模拟对 domainInstance.validate() 的调用,所以我可以让它返回我想要的任何东西?或者我是否必须隐藏这个实例并保存在服务方法后面才能实现这一点?
我这样做是因为在控制器单元测试的上下文中,不应涉及域对象的约束。我在其他地方进行了测试(显然是在 MyDomainClassTests 中)。如果我想将这些考虑在内,我的测试将是一个集成测试。
如果您没有将验证放在域实例本身上,而是放在服务中,您可以让您的控制器在其构造函数(或者更确切地说是服务的接口)中获取服务。让该服务处理验证。
现在,对于该控制器的单元测试,您可以将该接口(服务)的 Mock 传递给控制器,并将该模拟配置为返回您想要的任何内容。
对于.net,我可以推荐起订量(http://code.google.com/p/moq/)
一段时间后,我得出结论,我想要的东西相当棘手。如果您处于不必使用的场景中,则可以添加mockDomain()
一个 groovy 元类方法及其实现(返回 true 或 false,无论您想要什么)
如果你确实需要 mockDomain() 因为你需要模拟预先存在的实例,那么你就没有选择了,至少现在是因为 mockDomain() 和摆弄 mockDomain 实际提供的元类方法不会混合。