我在Spock中使用Spy時遇到問題,它要麼不能正常工作,要麼我的理解錯誤,所以我試圖澄清這一點。 考慮這個代碼(JAVA):Spock Framework:間諜問題
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
庫,所以我生成文件(在搖籃)看起來像這樣的:
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"
只是爲了防止任何人像我一樣無知:在Spock中,你不能嘲笑私有方法(當然這裏的OP可能知道這一點!):他們會像間諜一樣正常運行。我發現Spock的這個「限制」(實際上是因爲它沒有使測試意義)令人驚訝,因爲你可以從你的Spy中調用這些方法(並且似乎嘲笑它們)在你的測試代碼中。可能會很好,如果Spock可以不允許這個或將其標記爲錯誤... –