繁体   English   中英

Grails在单元测试2.4.x中将服务注入域

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM