unit-testing - Grails 在单元测试 2.4.x 期间将服务注入(inject)域

标签 unit-testing grails

这是包含一个简单 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 没有被注入(inject),所以想了解将服务注入(inject)域对象以进行单元测试的最佳方法。

任何想法,建议?

最佳答案

您可以随时模拟 springSecurityService或者只是 encodePassword方法。

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

关于unit-testing - Grails 在单元测试 2.4.x 期间将服务注入(inject)域,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32426132/

相关文章:

grails - 是否可以在多对多关系中添加额外的属性?

hibernate - 保存Grails(flash:true)

javascript - Karma 单元测试 : Module name "react" has not been loaded yet for context: _. 使用 require([])

objective-c - iOS 单元测试 : Can't link to symbols in my Application target. 怎么了?

javascript - 当我的单元测试失败时回调被调用两次

javascript - React 单元测试 onClick 方法中的 Mock Fetch API

c# - 如何在 MonoDevelop/.Net 中自动生成单元测试?

java - Google App Engine Java 更新权限检查错误

hibernate - Grails NonUniqueObjectException:具有相同标识符值的另一个对象已与 session 关联

grails - 包括所有 View 页面的通用布局