unit-testing - 在 grails 中,如何测试具有关联的 where 查询?

标签 unit-testing grails spock

我正在测试 where query但它总是返回一个空列表。如果我删除 owner.name == "Jane" 查询会返回一些内容,但是当我把它放回去时,它不会再返回任何内容。 where 查询肯定适用于 test-app 上的基本模型搜索,但是,我不确定它在包含关联时是否有效。它在 run-app 上工作正常,但在 test-app 上似乎失败了。难道我做错了什么?我需要 mock 什么吗?我正在使用 grails 2.3.9 和 spock。注意:我正在进行单元测试。

 Owner owner = Owner.build(name: "Jane")
 Pet expectedPet = Pet.build(breed: "Random dog", owner:owner)

 when:
 def pets = Pet.where {
            breed == "Random dog" && owner.name == "Jane"
 }.list()

 then:
 pets.size() == 1

最佳答案

不过,我可以使用我自己的域通过您的测试。我的假设是您的域中可能有其他字段导致保存失败。我的建议是使用 buildWithoutSave 并使用 failOnError:true 自行保存以进一步调试。

希望对你有帮助

//规范:

import grails.buildtestdata.mixin.Build
import spock.lang.Specification

@Build([Owner, Pet])
class OwnerSpec extends Specification {

    def setup() {
    }

    def cleanup() {
    }

    void "test something"() {
        setup:

        //Owner owner = Owner.build(name: "Jane")
        //Pet expectedPet = Pet.build(breed: "Random dog", owner: owner)

       Owner owner = Owner.buildWithoutSave(name: "Jane")
       owner.save(failOnError: true)

       Pet expectedPet = Pet.buildWithoutSave(breed: "Random dog", owner: owner)           
       expectedPet.save(failOnError: true)

        when:
        def pets = Pet.where {
            breed == "Random dog" && owner.name == "Jane"
        }.list()

        then:
        pets.size() == 1
    }
}

//域名

class Pet {

    String breed
    testsave.Owner owner

    static constraints = {
    }
}

class Owner {
    String name

    static constraints = {
    }
}

关于unit-testing - 在 grails 中,如何测试具有关联的 where 查询?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24573710/

相关文章:

java - OutputStream 的 JUnit 测试

unit-testing - 使用 Spring Boot 进行身份验证过滤器的集成测试

grails - webtest 和 grails 的性能问题

email - Grails 中邮件插件的外部化属性

grails - 当我希望在许多相似的领域执行相同的测试时,如何遍历Grails Spock测试中的测试?

php - 正确的单元测试

PHPUnit - 当 processIsolation 设置为 false 时无法重新声明类

grails - 如何在 Grails 中实现批处理

grails - 如何在GEB中选择标签文本?

Gradle sonarqube 无法识别常规测试