2013-10-21 10 views
7

Ich habe eine Klasse mit ein paar statischen Methoden.Ich muss diese statischen Methoden verspotten. Ich weiß, dass PowerMock dies tut, aber ich konnte keine Tutorials/Materialien finden, die etwas über die Integration von "Spock + PowerMock" aufklären. Ich bevorzuge Spock zu Junit, daher das Rätsel. Gibt es eine Möglichkeit, diese 2 Frameworks zu bekommen, um Ball zu spielen? Jede Hilfe wird sehr geschätzt.Sample Code, noch mehr.Verwenden von PowerMock mit Spock

Update: Aktuelle Status des Konzepts

Spock behaving weirdly

Antwort

13

Ich war auch hier für eine Weile fest. Nachdem ich stundenlang gesucht hatte, sah ich dieses GitHub Repo: https://github.com/kriegaex/Spock_PowerMock.

Ich habe versucht, eine PowerMockRule hinzuzufügen, die es mir im Wesentlichen ermöglichte, PowerMock zusammen mit Spock zu verwenden. Ich musste diese Abhängigkeiten hinzufügen. Version ist 1.5.4

<dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-module-junit4</artifactId> 
     <version>${powermock.version}</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-module-junit4-rule</artifactId> 
     <version>${powermock.version}</version> 
     <scope>test</scope> 
    </dependency> 

    <dependency> 
     <groupId>org.powermock</groupId> 
     <artifactId>powermock-classloading-xstream</artifactId> 
     <version>${powermock.version}</version> 
     <scope>test</scope> 
    </dependency> 

Meine Klasse sieht wie folgt aus:

import org.junit.Rule 
import org.mockito.Mockito 
import org.powermock.api.mockito.PowerMockito 
import org.powermock.core.classloader.annotations.PrepareForTest 
import org.powermock.modules.junit4.rule.PowerMockRule 
import spock.lang.Specification 

@PrepareForTest([SomeStaticClass.class]) 
public class FlightFormSpec extends Specification { 

    @Rule PowerMockRule powerMockRule = new PowerMockRule(); 

    def "When mocking static"() { 
     setup : 
      PowerMockito.mockStatic(SomeStaticClass.class) 

     when : 
      Mockito.when(SomeStaticClass.someStaticMethod()).thenReturn("Philippines!"); 

     then : 
      SomeStaticClass.someStaticMethod() == "Philippines!" 
    } 
} 

Hier ist eine andere Ressource ist: https://github.com/jayway/powermock/wiki/powermockrule

+2

Hey, du hast mein Repo gefunden und mich davor bewahrt, dieses eine selbst zu beantworten. :-) – kriegaex

+0

@kriegaex du hast es geschrieben. Ich habe fast mit Spock und PowerMock aufgehört. Vielen Dank für Ihre Repo-Veröffentlichung! :) – juanpaolo

+1

@Avinash: Du solltest die Antwort von Juanpaolo anstelle deiner eigenen annehmen, dass es nicht funktioniert. Ich denke, er hat es verdient. – kriegaex

1

Es gibt keine spezielle Integration; Ihre beste Wette ist es, PowerMock "wie es ist" zu verwenden. Soweit ich mich erinnern kann, hatte PowerMock Probleme mit Groovy und ich weiß nicht, ob das gelöst wurde. Und wenn ich mich nicht irre, schreibt PowerMock den Bytecode der Testklassen neu, also ist die nächste Frage, ob es mit Spock funktioniert. Lass uns wissen, was du findest.

+0

es ausprobiert, erhalte ich eine bizarre Fehler ähnlich dem beschrieben hier .... [link] (http://markmail.org/message/uehzu2wejtveldo6) .Absolut nicht sicher, was hier passiert :( – Avinash