【问题标题】:grails generated controller test fails on subclassgrails 生成的控制器测试在子类上失败
【发布时间】:2014-10-21 14:43:52
【问题描述】:

我正在尝试为 Grails 2.4.3 中的子类测试控制器。领域模型是这样的:

abstract class Task { ... }

class SubTask extends Task { ... }

当尝试为 SubTaskController 类运行生成的测试时,7 个测试中有 3 个失败:

  1. 保存
  2. 更新
  3. 删除

似乎(至少)域类的 id 没有初始化,尽管我在 populateValidParams() 方法中定义了它。调试器在 subTaskInstance 对象上显示了两个(!)生成的 id 属性,都是 null。当我在调试器中将 id 设置为某个 long 值时,错误至少会在几行之后出现。模拟子类是否存在错误,或者我做错了什么?

我也在基类中没有“抽象”的情况下尝试过,但得到了同样的错误。 生成的测试适用于不在继承层次结构中的对象。

当我直接在测试代码中额外设置 id 属性时,测试失败 SubTask.count() == 1 断言。似乎持久层模拟不处理子类。

【问题讨论】:

  • 你有机会给我们看一下代码吗?
  • 我希望populateValidParams 没有添加必要的请求参数。请参阅下面我的答案中链接的项目。
  • 谢谢你,杰夫,你把我带回了正确的道路;)。我忘了用大小约束 0..2000 初始化一个属性。不是很明显你必须初始化它,但无论如何......
  • @Geobe 非常棒。我很高兴你解决了。
  • 我不知道为什么这个问题目前对“不清楚你在问什么”有密切的投票。 99% 的情况下,这 3 个测试特别失败,这是因为测试没有填充请求参数的属性,要么是因为它们根本没有填充,要么是因为它们填充了与约束不一致的值。

标签: grails controller spock


【解决方案1】:

https://github.com/jeffbrown/controllerinheritancetest 上查看该项目。那里的两个控制器单元测试都通过了。

您确定在控制器单元测试的populateValidParams 方法中设置了有效数据吗?这可能是您的测试失败的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2013-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多