unit-testing - 扩展Grails模拟以进行单元测试(createCriteria,withNewSession等)

标签 unit-testing grails groovy

作为Grails项目的一部分,我目前正在将测试套件扩展到需要运行完整环境的内容,例如自定义HQL和条件查询,与 session 相关的问题等。我正在使用集成测试。

我们已经有相当多的单元测试(> 500),在这里我们曾经使用这样的辅助函数来模拟默认情况下没有Grails模拟对象的方法(例如withCriteriawithNewSession等):

static mockCriteria(Class clazz, returnValue)
{
  def myCriteria = new Expando()
  myCriteria.list = {Closure cls -> returnValue}
  myCriteria.get = {Closure cls -> returnValue}
  clazz.metaClass.static.createCriteria = { -> myCriteria }
}

然后可以像下面这样测试代码:
mockCriteria(MyClass, [result])
assert myClass.createCriteria.list({ ... }) == [result]

到目前为止,我一直使用这种方法设法满足我的需求。

现在,我想添加集成测试,这些测试实际检查使用条件和HQL查询的方法的行为,以便于重构这些查询。我对createCriteria在我的测试中被替换并且在单元测试阶段之后不恢复其初始代码的事实深感困惑,这阻止了我在集成阶段对其进行测试。

您如何解决模拟标准(或HQL查询等)的问题,同时又允许在集成测试中恢复原始行为?

编辑:不幸的是,升级到Grails 2不是一个选择。

最佳答案

我不是 mock 标准,而是 mock 使用它们的 Realm 方法。

另外,Grails 2.0 promise 在单元测试中提供标准支持-但不是HQL。

关于unit-testing - 扩展Grails模拟以进行单元测试(createCriteria,withNewSession等),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8312178/

相关文章:

grails - 缩小.war

c - 单个单元测试应该有多广泛?

python - 为什么我不能测试是否解决了正确的通用 View ?

grails - 将Grails 2.X迁移到3.X-什么是配置文件?

以数据库错误开头的 Grails 有没有人看到这个

spring - Grails Ldap记住我IllegalArgumentException

groovy - spock 测试的 where 子句中的多项赋值?

java - 将 java.io.BufferedReader 转换为 Json 对象

android - Android 库的 jacoco 代码覆盖率

swift - 如何在 swift 单元测试中验证方法是否在具体类中被调用