Spock Framework: проблемы со шпионажем
У меня проблема с использованием Spy в Spock, либо он не работает должным образом, либо мое понимание неверно, поэтому я пытаюсь уточнить это. Рассмотрим этот код (Java):
public class CallingClass {
public String functionOne() {
//does stuff
return "one";
}
public String functionTwo() {
String one = functionOne();
return "some string " + one;
}
}
Теперь я хочу проверить тот факт, чтоfunctionTwo
звонкиfunctionOne
а также определить возвращаемое значение изfunctionOne
(представьте, например, еслиfunctionOne
это действительно сложно, и я не хочу выполнять его в своем тесте, просто хочу заглушить его и установить для возврата определенного значения). Для этого я пишу следующий тест в Groovy (используя Спок):
class CallingClassTest extends Specification {
def "check that functionTwo calls functionOne"() {
def c = Spy(CallingClass)
c.functionOne() >> "mocked function return"
when:
def s = c.functionTwo()
then:
1 * c.functionOne()
s == "some string mocked function return"
}
}
Для того, чтобы сделать такие вещи, Спок просит меняcglib
библиотека, так что мой файл сборки (в Gradle) выглядит примерно так:
apply plugin: 'groovy'
repositories {
mavenCentral()
}
dependencies {
compile 'org.codehaus.groovy:groovy:latest.release'
testCompile 'org.spockframework:spock-core:latest.release'
testCompile 'junit:junit:latest.release'
testCompile 'cglib:cglib-nodep:latest.release'
}
Теперь, когда я запускаю тест, я ожидаюfunctionOne
не вызывать вообще, а вместо этого использовать мою заглушенную версию. Вместо этого я получаю это:
Condition not satisfied:
s == "some string mocked function return"
| |
| false
| 19 differences (44% similarity)
| some string (-)o(-------)n(-------)e(----)
| some string (m)o(cked fu)n(ction r)e(turn)
some string one
Condition not satisfied:
s == "some string mocked function return"
| |
| false
| 19 differences (44% similarity)
| some string (-)o(-------)n(-------)e(----)
| some string (m)o(cked fu)n(ction r)e(turn)
some string one
at CallingClassTest.check that functionTwo calls functionOne(CallingClassTest.groovy:17)
Тем более, если я отлаживаю это и устанавливаю точку останова вfunctionOne
это называется :(
Чего мне не хватает? Не должен ли мой тест использовать заглушкуfunctionOne
при условии и просто вернуть строку"mocked function return"
?