में पहली बार टाइमर, माफ कीजिए अगर मुझे कुछ याद आया है। मैं स्पॉक का उपयोग कर एक स्थिर विधि पर कॉल करने की उम्मीद कर रहा हूं। फीडबैक बहुत अच्छा होगाग्रोवीमॉक के साथ नकली स्थैतिक विधि या स्पॉक
ग्रोवी मैक्स के साथ, मैंने सोचा कि मैं स्थिर कॉल को प्राप्त करने में सक्षम हूं लेकिन इसे नहीं मिला है। पृष्ठभूमि के लिए, मैं विरासत जावा में परीक्षणों को फिर से शुरू करने की प्रक्रिया में हूं। रिफैक्टरिंग प्रतिबंधित है। मैं groovy-1.8 के साथ spock-0.7 का उपयोग कर रहा हूँ।
स्थिर विधि करने के लिए कॉल इस रूप में एक उदाहरण कॉल के साथ श्रृंखलित है:
public class ClassUnderTest{
public void methodUnderTest(Parameter param){
//everything else commented out
Thing someThing = ClassWithStatic.staticMethodThatReturnsAnInstance().instanceMethod(param);
}
}
staticMethod ClassWithStatic instanceMethod का एक उदाहरण देता है बात विधि के बाकी हिस्सों में जरूरत रिटर्न
हैं मैं सीधे ग्लोबल मॉक का उपयोग करता हूं, यह मॉक किए गए इंस्टेंस को ठीक करता है ठीक है:
def exerciseTheStaticMock(){
given:
def globalMock = GroovyMock(ClassWithStatic,global: true)
def instanceMock = Mock(ClassWithStatic)
when:
println(ClassWithStatic.staticMethodThatReturnsAnInstance().instanceMethod(testParam))
then:
interaction{
1 * ClassWithStatic.staticMethodThatReturnsAnInstance() >> instanceMock
1 * instanceMock.instanceMethod(_) >> returnThing
}
}
लेकिन अगर मैं मेथो चलाता हूं ClassUnderTest से dUnderTest:
def failingAttemptToGetPastStatic(){
given:
def globalMock = GroovyMock(ClassWithStatic,global: true)
def instanceMock = Mock(ClassWithStatic)
ClassUnderTest myClassUnderTest = new ClassUnderTest()
when:
myClassUnderTest.methodUnderTest(testParam)
then:
interaction{
1 * ClassWithStatic.staticMethodThatReturnsAnInstance() >> instanceMock
1 * instanceMock.instanceMethod(_) >> returnThing
}
}
यह है कि इसके instanceMethod में विफल पर चला जाता है ClassWithStatic की एक वास्तविक उदाहरण नीचे फेंकता है।
अगर किसी की सहायता करता है, तो मैं जावा कोड में स्थिर तरीकों को बदलने के लिए स्पोक में ग्रोवीमॉक का उपयोग कर रहा हूं, लेकिन इससे गलत तरीके से अन्य परीक्षण प्रभावित हुए। मैंने समस्या को ठीक करने के लिए इस एनोटेशन का उपयोग किया @ConfineMetaClassChanges – Topera