Grails 绑定到集合和地图

Grails 绑定到集合和地图,grails,documentation,Grails,Documentation,在grails文档中:7 Web层-参考文档,部分:绑定到集合和地图;下一个示例如下所示: class Album { String title static hasMany = [players: Player] Map players } class Player { String name } def bindingMap = [title: 'The Lamb Lies Down On Broadway', 'play

在grails文档中:7 Web层-参考文档,部分:绑定到集合和地图;下一个示例如下所示:

class Album {
    String title
    static hasMany = [players: Player]
    Map players
}
class Player {
    String name
}

def bindingMap = [title: 'The Lamb Lies Down On Broadway',
                  'players[guitar]': [name: 'Steve Hackett'],
                  'players[vocals]': [name: 'Peter Gabriel']
                  'players[keyboards]': [name: 'Tony Banks']]
def album = new Album(bindingMap)

assert album.title == 'The Lamb Lies Down On Broadway'
assert album.players.size() == 3
assert album.players.guitar == 'Steve Hackett'
assert album.players.vocals == 'Peter Gabriel'
assert album.players.keyboards == 'Tony Banks'

def updatedBindingMap = ['players[drums]': [name: 'Phil Collins'],
                         'players[keyboards]': [name: 'Anthony George Banks']]

album.properties = updatedBindingMap

assert album.title == 'The Lamb Lies Down On Broadway'
assert album.players.size() == 4
assert album.players.guitar == 'Steve Hackett'
assert album.players.vocals == 'Peter Gabriel'
assert album.players.keyboards == 'Anthony George Banks'
assert album.players.drums == 'Phil Collins'
但是,当我运行这个示例时,单元测试失败并产生下一个结果(下面是我的单元测试):

|加载Grails 2.3.11 |配置类路径 . |设置为测试的环境 ........................................ |在没有守护进程的情况下运行。。。 |编译1个源文件。 |正在运行1单元测试。。。第1页,共1页 |正在运行1单元测试。。。第2页,共2页 |失败:使用插入和更新测试构造函数绑定(estudio.AlbumSpec) |不满足的条件: album.players.guitar=='Steve Hackett' | | | | || |假 ||[姓名:史蒂夫·哈克特] |[键盘:[姓名:托尼·班克斯]、人声:[姓名:彼得·加布里埃尔]、吉他:[姓名:史蒂夫·哈克特]] 音乐专辑:(未保存) 在estudio.AlbumSpec.test中,通过插入和更新绑定构造函数(AlbumSpec.groovy:51) |完成2个单元测试,1个在0m 1s内失败 |测试失败-在/Users/hzendejas/my grails projects/estudio/target/test reports中查看报告 错误| 分叉Grails VM已退出,但出现错误

但当我修改assert并将.name属性添加为next时成功:

album.players.guitar.name=='Steve Hackett'

是Grails文档还是我不知道的东西

PD:我成功的单元测试:

package estudio

import grails.test.mixin.TestMixin
import grails.test.mixin.support.GrailsUnitTestMixin
import spock.lang.Specification

/**
 * See the API for {@link grails.test.mixin.support.GrailsUnitTestMixin} for usage instructions
 */
@TestMixin(GrailsUnitTestMixin)
class AlbumSpec extends Specification {

    void "test constructor binding with insert and updating"() {
        given:
        def bindingMap =
                [title: 'The Lamb Lies Down On Broadway',
                    'players[guitar]': [name: 'Steve Hackett'],
                    'players[vocals]': [name: 'Peter Gabriel'],
                    'players[keyboards]': [name: 'Tony Banks']
                ]

        def updatedBindingMap = [
            'players[drums]': [name: 'Phil Collins'],
            'players[keyboards]': [name: 'Anthony George Banks']
        ]

        when:
        def album = new Album(bindingMap)

        then:
        album.title == 'The Lamb Lies Down On Broadway'
        album.players.size() == 3
        album.players.guitar.name == 'Steve Hackett'
        album.players.vocals.name == 'Peter Gabriel'
        album.players.keyboards.name == 'Tony Banks'

        when:
        album.properties = updatedBindingMap

        then:
        album.title == 'The Lamb Lies Down On Broadway'
        album.players.size() == 4
        album.players.guitar.name == 'Steve Hackett'
        album.players.vocals.name == 'Peter Gabriel'
        album.players.keyboards.name == 'Anthony George Banks'
        album.players.drums.name == 'Phil Collins'
    }

    def setup() {
    }

    def cleanup() {
    }

    void "test something"() {
    }
}

这是文件中的一个错误。我刚修好。看


谢谢你的反馈。很抱歉给您添麻烦。

结束问题:我刚刚意识到grails文档本身是错误的,因为在前面的示例中,在我问题的示例主题property.name上面,断言中有效地指出了它。