2014-01-29 12 views
5

diesen Code auf the example in the Jmockit tutorial Gemäße sollte es tun:Mocking statische Methoden mit JMockit (1.5) vor der Klasse

@BeforeClass 
public static void setUpClass() { 
    new MockUp<UtilJndi>(){ 

     @Mock 
     public static String getDirectoryFromContext(Property jndiName) // line 66 
      throws DirectoryNotFoundException { 
     return "noDirectory"; 
     } 
    }; 
} 

Aber es zeigt:

myclass.java:[66,29] error: Illegal static declaration

Wie kann ich dieses Problem lösen?

ich eine andere Abhilfe wich hinzufügen wird funktioniert für mich:

ich meine verspottet Klasse erweitern MockUp erstellen:

public static class MockUtilJndi extends MockUp<UtilJndi> { 

    public MockUtilJndi() { 
     super(); 
    } 

    @Mock 
    public static String getDirectoryFromContext(Property jndiName) 
      throws DirectoryNotFoundException { 
     return "noDirectory"; 
    } 
} 

Wenn Sie bemerken, nenne ich das super() in meinem Konstruktor. Ursache nach Dokumentation, wenn Sie MockUp Konstruktor aufrufen wird die Umsetzung in der Zielklasse ändern .. so, wenn Sie diese haben in Ihrem verspottet Klassenkonstruktors Sie müssen nur Ihre Klasse innerhalb der @BeforeClass kommentierten Methode erstellen:

@BeforeClass 
public static void setUpClass() { 
    new MockUtilJndi(); 
} 
+0

Welche Linie ist Linie 66? –

+0

public static String getDirectoryFromContext (Eigenschaft jndiName) –

+1

Obwohl ich JMockit nicht kenne, scheint mir das Problem sehr klar zu sein. Die Fehlermeldung "Illegal static declaration" sagt Ihnen alles. Das "Statische" ist falsch. Auch das von Ihnen verlinkte Beispiel verwendet an dieser Stelle keine statische Methode. Wie bist du zu der Überzeugung gelangt, dass Statik dort platziert werden muss? (Confusing ...) – Seelenvirtuose

Antwort

7

Ok, ich werde meinen Kommentar auf eine Antwort aktualisieren.

Zunächst ist die Fehlermeldung sehr klar. "Illegale statische Deklaration" bedeutet nur, dass das statische Schlüsselwort falsch platziert ist. Entfernen Sie es!

Da Sie versuchen, eine statische Methode zu verspotten, haben Sie vielleicht geglaubt, dass Sie das statische Schlüsselwort auch setzen müssen. Aber die documentation for the Mock annotation sagt:

Method modifiers (including public, final, and even static), however, don't have to be the same.

, die einfach bedeutet, können Sie statische Methoden spotten auch ohne sie statisch zu deklarieren.

Hmm ... Ich fühle stark, dass die Formulierung der Dokumentation ein bisschen verwirrend ist. Offensichtlich ist es keine Option, aber Sie müssen es nicht als statisch deklarieren.

Verwandte Themen