[JAVA] Wie man jeden Fall mit PowerMock + Mockito1x verspottet

Überblick

Wie man jeden Fall mit Mockito 1x verspottet https://qiita.com/taka_22/items/0c13aacf6ffbc2c77970 Fortsetzung.

Annahme

Mockito 1.10.19 PowerMock 1.7.3 JUnit 4.11 Java 1.8.0_151

Fall

Behandelt Fälle, in denen abhängige Objekte mit neuen, statischen und privaten Methoden erstellt werden. Basierend auf dem vorherigen Muster haben wir es in die folgenden 12 Muster eingeteilt.

No Muster Rückgabetyp der Scheinzielmethode Mock Range Scheinbetrieb
7 Die Klasse, die Sie verspotten möchten, wird mit new generiert Anders als nichtig Das ganze Gibt den angegebenen Rückgabewert zurück
8 Die Klasse, die Sie verspotten möchten, wird mit new generiert Anders als nichtig Das ganze Eine Ausnahme auslösen
9 Die Klasse, die Sie verspotten möchten, wird mit new generiert void Das ganze Eine Ausnahme auslösen
10 Das Scheinziel ist eine statische Methode Anders als nichtig Das ganze Gibt den angegebenen Rückgabewert zurück
11 Das Scheinziel ist eine statische Methode Anders als nichtig Das ganze Eine Ausnahme auslösen
12 Das Scheinziel ist eine statische Methode void Das ganze Eine Ausnahme auslösen
13 Das Scheinziel ist eine private Methode Anders als nichtig Das ganze Gibt den angegebenen Rückgabewert zurück
14 Das Scheinziel ist eine private Methode Anders als nichtig Das ganze Eine Ausnahme auslösen
15 Das Scheinziel ist eine private Methode void Das ganze Eine Ausnahme auslösen
16 Das Scheinziel ist eine private Methode Anders als nichtig Nur einige Methoden Gibt den angegebenen Rückgabewert zurück
17 Das Scheinziel ist eine private Methode Anders als nichtig Nur einige Methoden Eine Ausnahme auslösen
18 Das Scheinziel ist eine private Methode void Nur einige Methoden Eine Ausnahme auslösen

Klasse zum Testen erstellt

DateUtil.java import java.text.SimpleDateFormat; import java.util.Date; public class DateUtil { private Boolean flag; public static String getCurrentDate() { Date d = new Date(); return new SimpleDateFormat("yyyy/MM/dd").format(d); } public static void setCurrentDate(long currentTime) { Date d = new Date(); d.setTime(currentTime); } public String getYYYYMMDDStringWrapper(Date date) throws Exception { return getYYYYMMDDString(date); } private String getYYYYMMDDString(Date date) throws Exception { return new SimpleDateFormat("yyyyMMdd").format(date); } private void setFlag(Boolean flag) throws Exception { this.flag = flag; } }

Wie schreibe ich einen Test?

So schreiben Sie einen Test in PowerMock

  1. Die in Mockito verwendeten Methoden wie mock / spy / doThrow müssen PowerMock zugeordnet sein.
  2. Geben Sie PowerMockRunner mit @RunWith an
  3. Geben Sie den Scheinzieltest mit @PrepareForTest an

import static org.powermock.api.mockito.PowerMockito.doThrow; import static org.powermock.api.mockito.PowerMockito.mock; import static org.powermock.api.mockito.PowerMockito.spy; import static org.powermock.api.mockito.PowerMockito.whenNew;

@RunWith(PowerMockRunner.class) @PrepareForTest({ DateUtil.class }) public class PowerMockTest { ...

No.7 Lässt whenNew einen Mock des von new erstellten Objekts zurückgeben.

/**

// Aufnahmephase Date dateMocked = mock(Date.class); whenNew(Date.class).withNoArguments().thenReturn(dateMocked); when(dateMocked.getTime()).thenReturn(expected.getTime());

// Wiederholungsphase String strDate = DateUtil.getCurrentDate();

// Überprüfungsphase assertThat(strDate, is("2015/05/05")); }

No.8 /**

// Wiederholungs- und Überprüfungsphase try { DateUtil.getCurrentDate(); fail(); } catch (RuntimeException e) { assertThat(e.getMessage(), is("aaa")); } }

No.9 /**

// Wiederholungs- und Überprüfungsphase try { DateUtil.setCurrentDate(123456789L); fail(); } catch (RuntimeException e) { assertThat(e.getMessage(), is("bbb")); } }

No.10 Verspotten Sie statische Methoden mit mockStatic.

/**

// Wiederholungs- und Überprüfungsphase assertThat(String.valueOf(true), is("false")); assertThat(String.valueOf(false), is("false")); }

No.11 /**

// Wiederholungs- und Überprüfungsphase try { String.valueOf(true); fail(); } catch (RuntimeException e) { assertThat(e.getMessage(), is("aaa")); } assertNull(String.valueOf(false)); }

No.12 /**

// Wiederholungs- und Überprüfungsphase try { DateUtil.setCurrentDate(12345L); fail(); } catch (RuntimeException e) { assertThat(e.getMessage(), is("bbb")); } }

No.13 Da es das Ganze verspotten wird, wird die verspottete Methode direkt durch Reflexion aufgerufen.

/**

// Wiederholungsphase Method getYYYYMMDDStringMethod = DateUtil.class.getDeclaredMethod("getYYYYMMDDString", Date.class); getYYYYMMDDStringMethod.setAccessible(true); String actual = (String)getYYYYMMDDStringMethod.invoke(dateMocked, new Date());

// Überprüfungsphase assertThat(actual, is("12345678")); }

No.14 /**

// Wiederholungs- und Überprüfungsphase try { Method getYYYYMMDDStringMethod = DateUtil.class.getDeclaredMethod("getYYYYMMDDString", Date.class); getYYYYMMDDStringMethod.setAccessible(true); getYYYYMMDDStringMethod.invoke(dateMocked, new Date()); fail(); } catch (Exception e) { if (e instanceof InvocationTargetException) { InvocationTargetException ite = (InvocationTargetException) e; assertThat(ite.getTargetException().getMessage(), is("aaa")); } else { fail(); } } }

No.15 /**

// Wiederholungs- und Überprüfungsphase Method setFlagMethod = DateUtil.class.getDeclaredMethod("setFlag", Boolean.class); setFlagMethod.setAccessible(true); try { setFlagMethod.invoke(dateMocked, true); fail(); } catch (Exception e) { if (e instanceof InvocationTargetException) { InvocationTargetException ite = (InvocationTargetException) e; assertThat(ite.getTargetException().getMessage(), is("bbb")); } else { fail(); } } }

No.16 Der einzige Unterschied beim Verspotten ist die Verwendung von Spion. Der Rest ist der gleiche wie Nr. 13-15. Es verspottet nicht alles, so dass Sie es mit öffentlichen Methoden testen können. Natürlich ist auch Reflexion möglich. /**

// Wiederholungsphase String strDate = dateMocked.getYYYYMMDDStringWrapper(new Date());

// Überprüfungsphase assertThat(strDate, is("12345678")); }

No.17 /**

// Wiederholungs- und Überprüfungsphase try { dateMocked.getYYYYMMDDStringWrapper(new Date()); fail(); } catch (RuntimeException e) { assertThat(e.getMessage(), is("aaa")); } }

No.18 /**

// Wiederholungs- und Überprüfungsphase Method setFlagMethod = DateUtil.class.getDeclaredMethod("setFlag", Boolean.class); setFlagMethod.setAccessible(true); try { setFlagMethod.invoke(dateMocked, true); fail(); } catch (Exception e) { if (e instanceof InvocationTargetException) { InvocationTargetException ite = (InvocationTargetException) e; assertThat(ite.getTargetException().getMessage(), is("bbb")); } else { fail(); } } }

Referenz

Mockito http://site.mockito.org/ PowerMock https://github.com/powermock/powermock

Projekt bestätigt zu arbeiten

https://github.com/taka2/mockito-sample

Wie man jeden Fall mit Mockito 1x verspottet

https://qiita.com/taka_22/items/0c13aacf6ffbc2c77970

Recommended Posts

Wie man jeden Fall mit PowerMock + Mockito1x verspottet
Wie man jeden Fall mit Mockito 1x verspottet
Mock Enum mit PowerMock
So verspotten Sie einen Super-Methodenaufruf in PowerMock
Verspotten Sie statische Methoden mit PowerMock
Wie man mit html.erb nummeriert (nummeriert)
Verspotten Sie den Konstruktor mit PowerMock
So aktualisieren Sie mit activerecord-import
Wie fange ich mit schlank an?
Wie man ein Zeichen mit "~" einschließt
Wie man mssql-tools mit alpine benutzt
So starten Sie Camunda mit Docker
So passen Sie TextPosition mit der iOS-Tastaturerweiterung an
So teilen Sie Dateien mit Docker Toolbox
So kompilieren Sie Java mit VsCode & Ant
[Java] Fassen Sie zusammen, wie Sie mit der Methode equals vergleichen können
[Android] Wie man mit dunklen Themen umgeht
Verwendung von BootStrap mit Play Framework
So wechseln Sie Miniaturbilder mit JavaScript
[Hinweis] Erste Schritte mit Rspec
API-basierte Steuerung mit cancancan
So erreichen Sie den Dateidownload mit Feign
So aktualisieren Sie verwandte Modelle mit accept_nested_attributes_for
So setzen Sie JAVA_HOME mit dem Appassembler-Maven-Plugin von Maven
So implementieren Sie TextInputLayout mit Validierungsfunktion
So behandeln Sie Anmeldefehler mit devise
So löschen Sie Daten mit einem externen Schlüssel
So testen Sie den privaten Bereich mit JUnit
So überwachen Sie Nginx mit Docker-Compose mit Datadog
Der Umgang mit dem Vorkompilieren von Assets ist fehlgeschlagen.
So erreichen Sie das Hochladen von Dateien mit Feign
So führen Sie Blazor (C #) mit Docker aus
So erstellen Sie eine Rails 6-Umgebung mit Docker
So laden Sie Oracle JDK 8 U / min mit Curl herunter
[Java] So testen Sie, ob es in JUnit null ist
Ausführen einer Methode und Verspotten mit JUnit
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
So speichern Sie mit einer Eingabe in mehreren Tabellen
So testen Sie Interrupts während Thread.sleep mit JUnit
Verwendung des eingebauten h2db mit Federstiefel
Verwendung des Java-Frameworks mit AWS Lambda! ??
So erstellen Sie mit ActiveHash mehrere Pulldown-Menüs
Hinweise zur Verwendung der einzelnen JUnit-Regeln
Verwendung der Java-API mit Lambda-Ausdrücken
Erste Schritte mit Eclipse Micro Profile
So geben Sie jemandem Ihr Image mit Docker
So fügen Sie mit MyBatis alles auf einmal ein
So schreiben Sie Testcode mit Basic-Zertifizierung
So erstellen Sie eine API mit GraphQL und Rails
Verwendung des NFS-Protokolls Version 2 mit Ubuntu 18.04
So löschen Sie eine Ressourcendatei mit Spring-Boot
So erstellen Sie Elementvariablen mit dem JPA-Modell
So überprüfen Sie variable Elemente mit RequestBodyMatching von WireMock