gpt4 book ai didi

grails - 你如何从你在 spock 中测试的类中模拟出方法

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

我有一个方法要在我的站点中测试

public boolean syncUser(username, password){
if (getUserFromDB(username)){
// do work
return true
}
return false
}

我如何测试 syncUser和 stub /模拟 getUserFromDB ?

我已经尝试了一切,包括
_ * _.getUserFromDB(*_) >> true
但它一直试图点击方法而不是使用返回值。测试用例如下:
void "successfulSyncUser"(){
given:
_ * _.getUserFromDB(*_) >> true

when:
def syncUserResult = userManagement.syncUser(username, password)

then:
syncGuidResult == true
}

最佳答案

您只能在模拟上使用此语句。

 _ * _.getUserFromDB(*_) >> true

这意味着您必须首先使用
def mock = Mock(YourClass)

在你的情况下 getUserFromDBsyncUser属于同一类。在这种情况下,您不能使用模拟。

这是你能做到的。您可以使用 Groovys 元类来覆盖当前 UserManagement 的实现。实例。
void "successfulSyncUser"(){
given:
userManagement.metaClass.getUserFromDB = { param1 -> return true }

when:
def syncUserResult = userManagement.syncUser(username, password)

then:
syncGuidResult == true
}

请找到一个简单的示例,如何使用 Groovy Magic 覆盖现有方法 :)
class Person {    
String sayHello() { 'Foo' }
}

def a = new Person()
def b = new Person()

println a.sayHello()
println b.sayHello()

a.metaClass.sayHello = { 'Bar' }

println a.sayHello()
println b.sayHello()

这将导致以下输出:
Foo
Foo
Bar
Foo

关于grails - 你如何从你在 spock 中测试的类中模拟出方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25754802/

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