[英]Grails inject services into domains during unit tests 2.4.x
这是包含一个简单的springSecurityService的域类
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,因此想了解将服务注入域对象以进行单元测试的最佳方法。
有什么想法,建议吗?
您总是可以模拟springSecurityService
或仅模拟encodePassword
方法。
另一种方法是使用集成测试。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.