我正在写一个 斯波克 测试控制器方法的单元测试。

测试中的控制器操作实例化了一个新的域实例对象,并在保存之前呼叫验证。无论如何,是否有嘲笑domaininstance.validate()的呼叫,以便我可以将其返回我想要的任何东西?还是我必须隐藏此实例并在服务方法后面保存以实现这一目标?

我这样做,因为在控制器的单元测试的上下文中,不应涉及域对象的约束。我在其他地方测试了这些(显然是在 MyDomainClassTests 中)。如果我想考虑到这些考虑,我的测试将是一项集成测试。

有帮助吗?

解决方案 2

过了一会儿,我得出的结论是,我想要的非常棘手。如果您处于不在的情况下 使用 mockDomain(), ,您可以添加一个groovy的元类方法,并且它是实现(返回True或False,无论您想要的哪个)

如果你 需要MockDomain(),因为您需要模拟您无法选择的预先存在的实例,至少目前是因为MockDomain()()和使用Mockyain实际上提供的MetaClass方法都不会混合。

其他提示

如果您没有将validation放置在域实例本身上,而是在服务中,则可以让控制器在其构造函数(或服务的接口)中使用服务。让该服务处理验证。

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

对于.net,我可以推荐最小起订量(http://code.google.com/p/moq/)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top