Grails可以';使用Spock测试时,不能将服务注入域

Grails可以';使用Spock测试时,不能将服务注入域,grails,service,dns,spock,inject,Grails,Service,Dns,Spock,Inject,使用Spock进行grails单元测试时,无法将服务实例自动注入域 下面是我的代码 服务: class-HiService{ 公共服务{ println“Init HiService,”+this.toString() } def sayHi(字符串名称){ println“嗨,${name}” } }如果不想自动布线,则需要进行集成测试。如果使用Grails 3,则使用@Integration进行注释;如果使用Grails 2,则扩展IntegrationSpec 请参阅:如果不想自动布线,

使用Spock进行grails单元测试时,无法将服务实例自动注入域

下面是我的代码

服务:

class-HiService{
公共服务{
println“Init HiService,”+this.toString()
}
def sayHi(字符串名称){
println“嗨,${name}”
}

}
如果不想自动布线,则需要进行集成测试。如果使用Grails 3,则使用@Integration进行注释;如果使用Grails 2,则扩展IntegrationSpec


请参阅:

如果不想自动布线,则需要进行集成测试。如果使用Grails 3,则使用@Integration进行注释;如果使用Grails 2,则扩展IntegrationSpec

请参阅:

@Mock([User,HiService])
类HiServiceTest扩展了规范{
def“test sayHi”(){
// ....
}
}
@Mock([User,HiService])
类HiServiceTest扩展了规范{
def“test sayHi”(){
// ....
}

}
由于您正在编写单元测试,您的服务将不会自动连接。同样,当您对用户类对象进行单元测试时,您应该在UserSpec中编写测试(而不是UserServceTest;在Spock中使用后缀Spec)。现在,您可以这样模拟HiService:

类UserSpec扩展了规范{

def "User is able to say hi"() {
    given:
    User user = new User(name: 'bla bla')

    and: "Mock the user service"
    def hiService = Mock(HiService)
    user.hiService = hiService

    when:
    user.sayHi()

    then:
    1 * sayHiService.sayHi(user.name)
}

}

由于您正在编写单元测试,您的服务将不会自动连接。同样,当您对用户类对象进行单元测试时,您应该在UserSpec中编写测试(而不是UserServceTest;在Spock中使用后缀Spec)。现在,您可以这样模拟HiService:

类UserSpec扩展了规范{

def "User is able to say hi"() {
    given:
    User user = new User(name: 'bla bla')

    and: "Mock the user service"
    def hiService = Mock(HiService)
    user.hiService = hiService

    when:
    user.sayHi()

    then:
    1 * sayHiService.sayHi(user.name)
}

}

您需要
item.hiService=service
给定:
块中。@dmahapatro它已经工作了,Thanks@dmahapatro在进行单元测试时,手工在域中初始化服务不是很方便,因为每个域可能会使用多个服务,我们可能会在每个单元测试中使用多个域,那个么你们有什么办法来解决这个问题吗?就像Hoof在回答中提到的那个样,编写集成测试。学到了很多。谢谢^+^您需要
item.hiService=service
given:
block中。@dmahapatro它工作了,Thanks@dmahapatro在进行单元测试时,手工在域中初始化服务不是很方便,因为每个域可能会使用多个服务,我们可能会在每个单元测试中使用多个域,那个么你们有什么办法来解决这个问题吗?就像Hoof在回答中提到的那个样,编写集成测试。学到了很多。谢谢^+^