Grails可以';使用Spock测试时,不能将服务注入域
使用Spock进行grails单元测试时,无法将服务实例自动注入域 下面是我的代码 服务: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 请参阅:如果不想自动布线,
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在回答中提到的那个样,编写集成测试。学到了很多。谢谢^+^