【问题标题】:How do I mock an acegi authenticate service for unit testing?如何模拟 acegi 身份验证服务以进行单元测试?
【发布时间】:2011-08-08 16:49:44
【问题描述】:

这是我的 grails 服务类方法:

class SomeService {
def authenticateService
def getUserName() { def cid = authenticateService.userDomain().customerid def uid = authenticateService.userDomain().userid def userDetails = User.findByCustomerIdAndUserId(cid, uid)
return userDetails.lastName+", "+userDetails.firstName }

如何为 acegi 安全插件提供的 authenticateService 创建一个 mock 用于单元测试?

我尝试了一个单元测试:


class SomeServiceTests extends GrailsUnitTestCase {
... 
...
def testGetUserName() {
    def service = new SomeService()
def authService = mockFor(AuthenticateService) authService.demand.userDomain().customerid { -> return 111} authService.demand.userDomain().userid { -> return 222} service.authenticateService = authService.createMock()
def uName = service.getUserName()
asserNotNull uName }
但, 当我运行测试时,它给出:

测试套件:SomeServiceTests
测试运行:1,失败:0,错误:1,经过时间:1.069 秒
导致错误
0
java.lang.ArrayIndexOutOfBoundsException: 0
在 grails.test.DemandProxy.invokeMethod(GrailsMock.groovy:171)
在 SomeServiceTests.testGetUserName(SomeServiceTests.groovy:230)

我无法解决问题。任何帮助表示赞赏,谢谢...

【问题讨论】:

    标签: unit-testing grails groovy spring-security


    【解决方案1】:

    这些行对我来说没有意义:

    authService.demand.userDomain().customerid { -> return 111}
    authService.demand.userDomain().userid { -> return 222}
    

    试试这样的方法:

    authService.demand.getUserDomain(2..2) { -> return [customerid:111, userid: 222] }
    

    【讨论】:

      猜你喜欢
      • 2016-08-12
      • 2017-05-05
      • 1970-01-01
      • 1970-01-01
      • 2020-11-01
      • 2020-08-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多