Mockito - Übersicht

Was ist Spott?

Mocking ist eine Möglichkeit, die Funktionalität einer Klasse isoliert zu testen. Das Verspotten erfordert keine Datenbankverbindung oder das Lesen von Eigenschaftendateien oder Dateiservern, um eine Funktionalität zu testen. Scheinobjekte verspotten den eigentlichen Dienst. Ein Scheinobjekt gibt Dummy-Daten zurück, die einer an ihn übergebenen Dummy-Eingabe entsprechen.

Mockito

Mockito erleichtert das nahtlose Erstellen von Scheinobjekten. Es verwendet Java Reflection, um Scheinobjekte für eine bestimmte Schnittstelle zu erstellen. Scheinobjekte sind nichts anderes als ein Proxy für tatsächliche Implementierungen.

Stellen Sie sich einen Fall von Stock Service vor, der die Preisdetails einer Aktie zurückgibt. Während der Entwicklung kann der eigentliche Lagerservice nicht zum Abrufen von Echtzeitdaten verwendet werden. Wir brauchen also eine Dummy-Implementierung des Stock Service. Mockito kann das sehr leicht tun, wie der Name schon sagt.

Vorteile von Mockito

  • No Handwriting - Sie müssen keine Scheinobjekte selbst schreiben.

  • Refactoring Safe - Durch das Umbenennen von Schnittstellenmethodennamen oder das Neuordnen von Parametern wird der Testcode nicht beschädigt, da zur Laufzeit Mocks erstellt werden.

  • Return value support - Unterstützt Rückgabewerte.

  • Exception support - Unterstützt Ausnahmen.

  • Order check support - Unterstützt die Überprüfung der Reihenfolge von Methodenaufrufen.

  • Annotation support - Unterstützt das Erstellen von Mocks mithilfe von Anmerkungen.

Betrachten Sie das folgende Code-Snippet.

package com.tutorialspoint.mock;

import java.util.ArrayList;
import java.util.List;

import static org.mockito.Mockito.*;

public class PortfolioTester {
   public static void main(String[] args){

      //Create a portfolio object which is to be tested		
      Portfolio portfolio = new Portfolio();

      //Creates a list of stocks to be added to the portfolio
      List<Stock> stocks = new ArrayList<Stock>();
      Stock googleStock = new Stock("1","Google", 10);
      Stock microsoftStock = new Stock("2","Microsoft",100);

      stocks.add(googleStock);
      stocks.add(microsoftStock);		

      //Create the mock object of stock service
      StockService stockServiceMock = mock(StockService.class);

      // mock the behavior of stock service to return the value of various stocks
      when(stockServiceMock.getPrice(googleStock)).thenReturn(50.00);
      when(stockServiceMock.getPrice(microsoftStock)).thenReturn(1000.00);

      //add stocks to the portfolio
      portfolio.setStocks(stocks);

      //set the stockService to the portfolio
      portfolio.setStockService(stockServiceMock);

      double marketValue = portfolio.getMarketValue();

      //verify the market value to be 
      //10*50.00 + 100* 1000.00 = 500.00 + 100000.00 = 100500
      System.out.println("Market value of the portfolio: "+ marketValue);
   }
}

Lassen Sie uns die wichtigen Konzepte des obigen Programms verstehen. Der vollständige Code ist im Kapitel verfügbarFirst Application.

  • Portfolio - Ein Objekt, um eine Liste von Beständen zu führen und den Marktwert anhand der Aktienkurse und der Bestandsmenge zu berechnen.

  • Stock - Ein Objekt, das die Details eines Bestands wie ID, Name, Menge usw. enthält.

  • StockService - Ein Stock Service gibt den aktuellen Kurs einer Aktie zurück.

  • mock(...) - Mockito hat einen Mock-of-Stock-Service erstellt.

  • when(...).thenReturn(...)- Scheinimplementierung der getPrice-Methode der stockService-Schnittstelle. Geben Sie für googleStock 50,00 als Preis zurück.

  • portfolio.setStocks(...) - Das Portfolio enthält jetzt eine Liste von zwei Aktien.

  • portfolio.setStockService(...) - Weist dem Portfolio das stockService Mock-Objekt zu.

  • portfolio.getMarketValue() - Das Portfolio gibt den Marktwert basierend auf seinen Aktien über den Mock Stock Service zurück.