gpt4 book ai didi

unit-testing - 如何在单元测试中模拟 springSecurityService

转载 作者:行者123 更新时间:2023-12-01 00:49:08 26 4
gpt4 key购买 nike

我正在对内部创建用户实例的 Grails Controller 方法进行单元测试。用户域类使用 springSecurityService Spring Security 插件在将密码插入数据库之前对其进行编码。

有没有办法 mock springSecurityService从我的单元测试为了摆脱那个错误?

 Failure:  Create new individual member(MemberControllerSpec)
| java.lang.NullPointerException: Cannot invoke method encodePassword() on null object

请在下面找到我的单元测试。
@TestMixin(HibernateTestMixin)
@TestFor(MemberController)
@Domain([User, IndividualPerson])
class MemberControllerSpec extends Specification {

void "Create new individual member"() {

given:
UserDetailsService userDetailsService = Mock(UserDetailsService)
controller.userDetailsService = userDetailsService

def command = new IndividualPersonCommand()
command.username = 'scott@tiger.org'
command.password = 'What ever'
command.firstname = 'Scott'
command.lastname = 'Tiger'
command.dob = new Date()
command.email = command.username
command.phone = '89348'
command.street = 'A Street'
command.housenumber = '2'
command.postcode = '8888'
command.city = 'A City'

when:
request.method = 'POST'
controller.updateIndividualInstance(command)

then:
view == 'createInstance'

and:
1 * userDetailsService.loadUserByUsername(command.username) >> null

and:
IndividualPerson.count() == 1

and:
User.count() == 1

cleanup:
IndividualPerson.findAll()*.delete()
User.findAll()*.delete()
}
}

最佳答案

模拟服务的一种方法是使用 Groovy 的 MetaClass

import grails.test.mixin.Mock
import grails.plugin.springsecurity.SpringSecurityService

...
@Mock(SpringSecurityService)
class MemberControllerSpec extends Specification {

def setupSpec() {
SpringSecurityService.metaClass.encodePassword = { password -> password }
}

def cleanupSpec() {
SpringSecurityService.metaClass = null
}
....

在本例中,调用 SpringSecurityService.encodePassword()将简单地以纯文本形式返回密码。

讨论了使用 Mocks 的方法 here .

关于unit-testing - 如何在单元测试中模拟 springSecurityService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32374109/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com