Mock méthode statique avec GroovyMock ou similaire dans Spock
First-timer ici, toutes mes excuses si j'ai oublié quelque chose.
Je suis l'espoir d'obtenir autour d'un appel à une méthode statique à l'aide de Spock. Commentaires serait grand
Avec groovy se moque, je pensais que je serais en mesure de passer l'appel statique, mais n'ont pas trouvé.
Pour le fond, je suis dans le processus de rénovation des tests en héritage java. Le Refactoring est interdite. Je suis l'aide de spock-0.7 avec groovy-1.8.
L'appel à la méthode statique est enchaîné avec une instance d'appel dans le présent formulaire:
public class ClassUnderTest{
public void methodUnderTest(Parameter param){
//everything else commented out
Thing someThing = ClassWithStatic.staticMethodThatReturnsAnInstance().instanceMethod(param);
}
}
staticMethod retourne une instance de ClassWithStatic
instanceMethod retourne la Chose nécessaire dans le reste de la méthode
Si je exercer directement le mondial se moquer, il renvoie l'instance factices ok:
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
}
}
Mais si je lance le methodUnderTest de la ClassUnderTest:
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
}
}
Il jette une véritable instance de ClassWithStatic qui finit par échouer dans sa instanceMethod.
source d'informationauteur alexgibbs
Vous devez vous connecter pour publier un commentaire.
Spock ne peut se moquer de méthodes statiques mis en œuvre en Groovy. De se moquer de méthodes statiques mis en œuvre en Java, vous aurez besoin d'utiliser un outil comme GroovyMock , PowerMock ou JMockit.
PS: étant Donné que ces outils tirez de quelques gros trucs afin d'atteindre leurs objectifs, je serais intéressé de savoir si et comment ils fonctionnent bien ensemble avec des tests mis en œuvre dans Groovy/Spock (plutôt que Java/JUnit).
Voici comment j'ai résolu mon problème similaire (se moquant d'un statique à l'appel de la méthode qui est appelée à partir d'une autre classe statique) avec Spock (v1.0) et PowerMock (v1.6.4)
La
@PowerMockIgnore
annotation est facultatif, à n'utiliser que si il y a des conflits avec les bibliothèques existantes