class ExampleSpec extends Specification {
def "should return second value of list of return values"() {
given:
Person personBob = Mock()
Person personJackson = Mock()
PersonHelper stubbedPerson = Stub()
stubbedPerson.getNameOfBrother(personBob) >> "Billy Bob";
stubbedPerson.getNameOfBrother(personJackson) >> "Tommy Jackson";
when:
String actual = stubbedPerson.getNameOfBrother(personBob)
String actual2 = stubbedPerson.getNameOfBrother(personJackson)
then:
actual == "Billy Bob" // true
actual2 == "Tommy Jackson" // false "Billy Bob"
}
}
测试失败,因为第二次调用varactual2
仍然返回Billy Bob而不是Tommy Jackson。我知道有一种方法可以通过调用顺序返回不同的值,但我想让它依赖于给定的模拟。
使用普通值--没有模拟/存根代理--作为参数值实际上是有效的。我假设Spock引擎在两个模拟之间不会有差异。但我不确定这一点,因为代理确实有ID作为实例字段。
对于记录--使用模拟对象进行存根是有效的。我在示例中添加了简单的Person
和PersonHelper
类,测试通过了:
import spock.lang.Specification
class ExampleSpec extends Specification {
def "should return second value of list of return values"() {
given:
Person personBob = Mock()
Person personJackson = Mock()
PersonHelper stubbedPerson = Stub()
stubbedPerson.getNameOfBrother(personBob) >> "Billy Bob";
stubbedPerson.getNameOfBrother(personJackson) >> "Tommy Jackson";
when:
String actual = stubbedPerson.getNameOfBrother(personBob)
String actual2 = stubbedPerson.getNameOfBrother(personJackson)
then:
actual == "Billy Bob" // true
actual2 == "Tommy Jackson" // false "Billy Bob"
}
static class Person {
String name
}
static class PersonHelper {
String getNameOfBrother(Person person) {
return null
}
}
}
我已经用spock-core:1.1-groovy-2.4
、spock-core:1.0-groovy-2.4
甚至spock-core:0.7-groovy-2.0
检查了它。都起作用了。
但更重要的是--这样的测试没有任何意义。你根本不测试你的代码。您只测试模仿框架是否正确模仿。如果您在生产代码中使用Spock mocks,这个测试可能会有一些意义,但这不是一个有效的假设。
我在这件事上纠结了一段时间。是否可以模拟新URL(URL)。openStream()返回一个文件。广州?我正在使用斯波克来尝试这样做。 测试类 或者我最好编写一个私有方法来返回流?
给定一个类Foo 为什么我用Spock来嘲笑Foo 调用总是返回false? 不确定这是否有区别,但测试是在Groovy/Spock中进行的,而Foo是在Java8中进行的。
您可以在下面找到整个应用程序:https://github.com/ahlinist/raspberry-pi4j/tree/feature/integration-tests 我试图实现以下描述的结果:https://github.com/spockframework/spock/blob/master/spock-spring/boot-test/src/test/groovy/org/spo
我在spring boot应用程序中用groovy(spock)编写了一个集成测试。其中一个应用程序bean称为,它具有以下方法: 在类中还有其他方法。在我的集成测试中,我只想模拟该特定方法的响应。以以下方式: 我希望进行其他验证,但不是这次。基本上,我想实现这一点,但与斯波克。我想取消执行方法
有一个方法
所以我想做一些事情 但我得到了空异常