Unit testing 忽略Spock中的模拟模型调用

Unit testing 忽略Spock中的模拟模型调用,unit-testing,grails,spock,Unit Testing,Grails,Spock,我正在测试Grails中的一个控制器。它使用的模型具有以下方法: def beforeInsert() { if (password != null) { encodePassword() } } protected void encodePassword() { password = springSecurityService.encodePassword(password) } 当我尝试测试将密码保存到数据库的方法时,它会返回以下消息:java.l

我正在测试Grails中的一个控制器。它使用的模型具有以下方法:

def beforeInsert() {
    if (password != null) {
        encodePassword()
    }
}

protected void encodePassword() {
    password = springSecurityService.encodePassword(password)
}
当我尝试测试将密码保存到数据库的方法时,它会返回以下消息:
java.lang.NullPointerException:Cannot invoke method encodePassword()on null对象


我如何告诉测试只模拟该方法调用还是忽略该方法调用?

您可以在控制器测试中尝试以下方法

Domain.metaClass.beforeInsert = {-> }
PS:我没有试过这个


如果可能,请同时粘贴单元测试代码。

您需要将springSecurityService注入控制器本身

def springSecurityService
controller.springSecurityService = springSecurityService

这样,您将禁用beforeInsertlogic@FranGarc是的,要求忽略方法调用的人:我如何告诉测试只是模拟该方法调用还是忽略该方法调用?是的。我已经解决了这个问题,但忘了发布答案。我不确定你的方法是否有效,但可能是因为我所做的是你方法的变体。我没有重写插入之前的
方法,而是重写了
encodePassword
方法。但基本相同,所以我接受这个答案。