2015-09-06 80 views
0

这里是一个包含一个简单的springSecurityServiceGrails的过程中单元测试的2.4.x中注入服务领域

class Login { 

    def springSecurityService 

    String username 
    String password 

    boolean enabled; 
    boolean accountExpired; 
    boolean accountLocked; 
    boolean passwordExpired; 

    static constraints = { 
    username blank: false, unique: true 
    password blank: false 
    } 

    def beforeInsert() { 
    encodePassword() 
    } 

    def beforeUpdate() { 
    if (isDirty('password')) { 
     encodePassword() 
    } 
    } 

    protected void encodePassword() { 
    password = springSecurityService.encodePassword(password) 
    } 

} 

简单的单位规格

import grails.plugin.springsecurity.SpringSecurityService 
import grails.test.mixin.TestFor 
import grails.test.mixin.TestMixin 
import grails.test.mixin.support.GrailsUnitTestMixin 
import spock.lang.Specification 

@TestFor(Login) 
@TestMixin(GrailsUnitTestMixin) 
class LoginSpec extends Specification { 

    def setup() { 
    defineBeans { 
     springSecurityService(SpringSecurityService) 
    } 
    } 

    def cleanup() { 
    } 

    void "test service injected in domain"() { 
    given:'' 

    when:'' 
    Login l = new Login() 


    then:'' 
    applicationContext.getBean("springSecurityService") != null 
    // fails 
    l.springSecurityService != null 
    } 
} 

域类,我想测试一个简单的Login.save (),但意识到springSecurityService没有被注入,所以想要了解将服务注入到域对象以进行单元测试的最佳方式。

有什么想法,建议吗?

回答

0

你总是可以嘲笑springSecurityService或只是encodePassword方法。

另一种方法是使用集成测试。

+0

我可以明确地分配“l.springSeurityService = applicationContext.getBean(”springSecurityService“)”。如果这些将从“defineBeans”部分中定义的bean自动装配,那将是理想的。 –

相关问题