【发布时间】:2014-10-21 14:43:52
【问题描述】:
我正在尝试为 Grails 2.4.3 中的子类测试控制器。领域模型是这样的:
abstract class Task { ... }
class SubTask extends Task { ... }
当尝试为 SubTaskController 类运行生成的测试时,7 个测试中有 3 个失败:
- 保存
- 更新
- 删除
似乎(至少)域类的 id 没有初始化,尽管我在 populateValidParams() 方法中定义了它。调试器在 subTaskInstance 对象上显示了两个(!)生成的 id 属性,都是 null。当我在调试器中将 id 设置为某个 long 值时,错误至少会在几行之后出现。模拟子类是否存在错误,或者我做错了什么?
我也在基类中没有“抽象”的情况下尝试过,但得到了同样的错误。 生成的测试适用于不在继承层次结构中的对象。
当我直接在测试代码中额外设置 id 属性时,测试失败
SubTask.count() == 1 断言。似乎持久层模拟不处理子类。
【问题讨论】:
-
你有机会给我们看一下代码吗?
-
我希望
populateValidParams没有添加必要的请求参数。请参阅下面我的答案中链接的项目。 -
谢谢你,杰夫,你把我带回了正确的道路;)。我忘了用大小约束 0..2000 初始化一个属性。不是很明显你必须初始化它,但无论如何......
-
@Geobe 非常棒。我很高兴你解决了。
-
我不知道为什么这个问题目前对“不清楚你在问什么”有密切的投票。 99% 的情况下,这 3 个测试特别失败,这是因为测试没有填充请求参数的属性,要么是因为它们根本没有填充,要么是因为它们填充了与约束不一致的值。
标签: grails controller spock