我想在我的网站上测试一种方法
public boolean syncUser(username, password){
if (getUserFromDB(username)){
// do work
return true
}
return false
}
如何测试syncUser
和存根/模拟getUserFromDB
?
我已尝试过所有内容,包括
_ * _.getUserFromDB(*_) >> true
但它不断尝试使用该方法而不是使用返回值。测试用例如下:
void "successfulSyncUser"(){
given:
_ * _.getUserFromDB(*_) >> true
when:
def syncUserResult = userManagement.syncUser(username, password)
then:
syncGuidResult == true
}
答案 0 :(得分:1)
您只能在模拟中使用此语句。
_ * _.getUserFromDB(*_) >> true
这意味着您必须先使用
def mock = Mock(YourClass)
在您的情况下,getUserFromDB
和syncUser
属于同一个班级。在这种情况下,你不能使用模拟。
这是希望你能做到的。您可以使用Groovys Metaclass覆盖当前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