模拟domainInstance.validate()的返回值

时间:2011-01-18 12:34:33

标签: unit-testing grails mocking spock

我正在编写一个测试控制器方法的spock单元测试。

正在测试的控制器操作实例化一个新的域实例对象和 在保存之前调用对它进行验证。 有没有嘲笑对domainInstance.validate()的调用所以我 能让它回归我想要的吗?或者我必须隐藏这个 实现这种服务方法的实例和保存?

我这样做,因为在单元测试的上下文中 控制器,不应涉及域对象的约束。 我在其他地方测试(显然在MyDomainClassTests中)。如果我 我想把这些考虑在内,我的测试就是整合 测试

2 个答案:

答案 0 :(得分:1)

如果您没有将验证放在域实例本身上,而是放在服务中, 您可以让您的控制器在其构造函数(或者更确切地说是服务的接口)中获取服务。让该服务处理验证。

现在对于你的控制器的单元测试,你可以将该接口(服务)的模拟传递给控制器​​并配置模拟以返回你想要的任何内容。

对于.net我可以推荐Moq(http://code.google.com/p/moq/

答案 1 :(得分:0)

过了一会儿,我得出结论,我想要的是相当棘手的。如果您处于 使用mockDomain()的情况,您可以添加一个groovy元类方法及其实现(返回true或false,无论您想要哪个)

如果你需要mockDomain(),因为你需要模拟预先存在的实例,你就没有选择了,至少现在是因为mockDomain()和摆弄mockDomain实际提供的元类方法不要混。