【发布时间】:2015-03-09 15:54:58
【问题描述】:
我开始使用 grails,但我偶然发现了一种我不理解的行为。
给定这个域类
class Team {
String name
Date since
Date until
static hasMany = [teamMembers:Player]
static constraints = {
name nullable: false, blank: false, unique: true
until nullable: true
until(validator: { val, obj ->
val?.after(obj.since)
})
teamMembers maxSize: 8
//teamMembers size: 0..8
}
}
我想要一个集成测试来检查一个团队中实际上不能有超过 8 名球员,所以我写了一个简化版本:
void "The team can only have up to 8 players"(){
given:
Player[] players = (1..9).collect {new Player(name: "Foo")}
Team t = new Team(name:"Bar", since: new Date())
expect:
players.each {it.validate()}
t.validate()
when:
players.each {it.save()}
t.save()
players.each {t.addToTeamMembers(it)}
then:
t.validate() == false
t.getTeamMembers().size() == 9
Team.get(t.id).teamMembers.size == 9
Team.first().teamMembers.size == 9
Team.findAll()[0].teamMembers.size == 9
Team.findByName("Bar").teamMembers.size == 9
}
据我所知,get、find * 等会访问数据库。那么为什么我的团队无法验证(预期行为)但数据库中有 9 名玩家? 我错过了什么?
注意:名称不是玩家的 PK,我已经测试了约束、大小和 maxSize。
【问题讨论】:
-
employees.each ?你是说players.each吗?
-
这是单元测试还是集成测试?
-
@codehx 是的,players.each
-
所以我的回答对你没有帮助?
-
@BurtBeckwith 集成测试
标签: grails grails-orm spock