Spock:在运行时创建模拟对象

时间:2012-01-13 04:43:40

标签: java mocking spock

我的班级Foo有一个方法Bar makeBar(String id)。您可以猜测,makeBar会创建一个标识为Bar的新id对象。 Barid的吸气剂。

为了我的测试,我需要模仿Foo。我希望模拟的makeBar方法创建模拟的Bar对象,其中getter返回正确的id(赋予makeBar的那个)。


所以要清楚,我想创建一个foo的模拟实例Foo,以便

foo.makeBar(someId)

返回

的模拟Bar对象bar
bar.getId() == someID

有没有办法用Spock做到这一点,还是应该把所有东西都存根?

1 个答案:

答案 0 :(得分:4)

是的,有可能让模拟返回其他模拟。这样就可以了:

Foo foo = Mock()

foo.makeBar(_) >> { String id ->
    Bar bar = Mock()
    bar.getId() >> id
    bar
}

我在这里发布了完整且可运行的代码:http://webconsole.spockframework.org/?id=40001