如何验证递归方法的spock测试的where子句中的方法调用



假设我的类是Foo,它有一个递归方法栏,可以调用下面的服务

public class Foo
{
private DataService service;
public void perform(int count, final SomeObject obj)
{
if(count > 0)
{
service.refresh(obj);
count = count- 1;
perform(count, obj)
}
}
}

现在我想验证不同输入调用刷新方法的次数,比如这个

@Test
def "test method"()
{
given:
def obj = Mock(SomeObject)
expect:
foo.perform(refreshRequests, inputObj)
where:
refreshRequests | inputObj | 
1               | obj      | 1 * service.refresh(obj)
2               | obj      | 2 * service.refresh(obj)
}

有没有办法实现这样的目标?提前感谢!

你很接近,这就是你的做法。你基本上只是将交互移动到它所属的then块,并使用refreshRequests作为预期的调用计数。

refreshRequests * service.refresh(inputObj)

经过一些小修改的完整可运行示例。

public class Foo
{
private DataService service;
public void perform(int count, String obj)
{
if(count > 0)
{
service.refresh(obj);
count = count- 1;
perform(count, obj)
}
}
}
interface DataService {
void refresh(String aString)
}
class ASpec extends spock.lang.Specification {
def "test method"()    {
given:
def service = Mock(DataService)
Foo foo = new Foo(service: service)
when:
foo.perform(refreshRequests, inputObj)
then:
refreshRequests * service.refresh(inputObj)
where:
refreshRequests | inputObj 
1               | "a" 
2               | "b"     
}
}

在groovy web控制台中尝试一下。

最新更新