如何验证递归方法的spock测试where子句中的方法调用
How to verify method calls in where clause of spock test for a recursive method
假设我的 class 是带有递归方法 bar 的 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 console 中尝试。
假设我的 class 是带有递归方法 bar 的 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 console 中尝试。