gpt4 book ai didi

grails - 动态覆盖Mock()spock返回的对象的属性

转载 作者:行者123 更新时间:2023-12-02 14:24:49 26 4
gpt4 key购买 nike

我正在尝试使用继承了只读ID的Spock测试对象,但是为了进行测试,我需要设置一个值。我已经使用hasProperty验证了该属性在运行时是否存在。我试过的是:

def au = Mock(AisUser)
au.id >> 2L

我无法使用metaClass进行操作,因为它是一个模拟。还有其他方法可以动态覆盖该属性吗?也许将其从对象中删除,然后动态重新插入?

最佳答案

在弄乱了很多代码之后,我发现了。每次调用静态方法restoreCurrentAisUser时,都会返回AisUser的实例。但是我在安装程序块中动态添加了该静态方法。所以我想起了,因为我声明了一个闭包,并且我可以访问该块其余部分的变量,所以我将创建一个AisUser的实例,每次执行闭包时我都会返回该实例,并且我将在其上放置一个Spy实例,以便我可以验证其行为。而且我还通过元编程动态添加了id。可能是因为我没有在AisUser上调用ockMockDomain,所以它没有强制执行readonly属性,但是我不确定为什么要让我这样做,但是它可以工作。所以这是代码:

def au = Spy(AisUser)
SecurityUtil.metaClass.'static'.retrieveCurrentAisUser = { boolean param ->
au.id >> 1L
return au;
}

然后在然后块中,我可以这样做:
1 * au.getProperty('id')

关于grails - 动态覆盖Mock()spock返回的对象的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19245345/

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