2016-11-22 4 views
2

Ich habe ein Problem mit dem Mocking eines statischen Tests mit meinem Code kompiliert mit Java7.PowerMock-Problem beim Mocking einer statischen Methode mit Java7-Konstrukt

Ich bin mit Anmerkungen versehen meine JUnit-Test mit den Anmerkungen

@RunWith(PowerMockRunner.class) 
@PrepareForTest(StaticClassToMock.class) 

Wenn mein Test laufen und versuchen, meine statische Klasse mit

PowerMockito.mockStatic(StaticClassToMock.class); 

zu verspotten es

java.lang.VerifyError: JVMVRFY012 stack shape inconsistent [...] 

Wenn kehrt in StaticClassToMock Ich entferne die Java7-Konstrukte, indem ich die eingefangenen Ausnahmen in OR ersetze und t setze Saum in Kaskade funktioniert es gut.

Ich sah, dass die letzte Version von Powemock (1.6.6) mit Java6 kompiliert wurde.

Ist meine Frage an die Konstrukte Java7 bezogen, wenn PowerMock mit Java6 kompiliert wird?

Dank

Antwort

1

, dass die Sache mit PowerMock ist - willkommen in seinen bizarren Fehlern.

Erste Frage wäre - verwenden Sie ein IBM JDK? Weil IBM JDK und PowerMock noch "bizarrer" sind als Oracle/OpenJDK und PowerMock.

Wenn Sie etwas suchen zu tun, es gibt viele potenzielle Hinweise um:

  1. VerifyError on WAS
  2. Code not working with Java7

Wie auch immer, die erste Antwort wäre: einfach versuchen, wenn Ihr JVM läuft mit -noverify macht einen Unterschied.

Die längere Antwort: es sei denn, Sie testen Code von Drittanbietern, den Sie nicht ändern können; bedenken Sie ... nicht mit statisch Code in einer Weise, die Sie an PowerMock wenden. siehe

Sie, statische ist zunächst eine Anomalie auf eine gute OO-Design. Es sollte mit großer Sorgfalt verwendet werden; weil es eine Menge direkter Kopplung in deinen Code bringt. Und einfach gesprochen: mit statische ist eine der einfachsten Möglichkeiten, um Code zu erstellen, der schwer/unmöglich zu testen ist! Also, wenn die Änderung Ihres Codes eine Option ist, könnten Sie diese videos sehen, um zu lernen, wie testbare Code an erster Stelle zu erstellen. Und dann müssen Sie sich einfach an PowerMock wenden ... wird einfach verschwinden.

Meine persönlichen zwei Cent: Ich habe viele Stunden damit verbracht, solche PowerMock Probleme zu jagen. Dann haben wir uns entschieden, verschiedene Designs zu machen, die nur statische Inhalte zulassen, die unsere normalen Komponententests nicht unterbrechen. Seitdem leben wir gut mit EasyMock und Mockito.Keine Notwendigkeit mehr für PowerMock; keine Notwendigkeit mehr, Stunden damit zu verbringen, Probleme zu debuggen, die nichts mit unserem Produktionscode zu tun hatten; aber nur der spottende Rahmen.

+0

Vielen Dank für Ihre Erklärung GhostCat, ich stimme Ihren Aussagen über statischen Code und IBM JDK vollkommen zu. Ich erweitere leider den IBM Code und es gibt keine Möglichkeit, den bestehenden zu modifizieren. Jedenfalls habe ich es geschafft, dieses Zeug zu lösen: Es war wegen einer Oldjavassist-Bibliothek. Das Upgrade auf ein neues Problem hat mein Problem gelöst. Danke vielmals! – flavio

+1

Sie sind herzlich willkommen; Danke auch für dein Update! – GhostCat

Verwandte Themen