Was ist Mockito und wozu wird es benötigt?
\n\nMockito ist eine leistungsstarke Bibliothek für Java, die zum Erstellen von Mock-Objekten (Stubs) in Modultests entwickelt wurde. Sie ermöglicht es, den zu testenden Code von seinen Abhängigkeiten wie Datenbanken, externen APIs, Dateisystemen oder anderen Diensten zu isolieren. Anstelle von realen Objekten, die langsam, instabil sein oder eine komplexe Einrichtung erfordern können, erstellen Sie deren Nachbildungen mit einem vorab festgelegten Verhalten.
\n\nDas Hauptziel von Mockito ist es, Unit-Tests schnell, vorhersagbar und unabhängig von der externen Umgebung zu machen. Die Bibliothek wird im Java-Ökosystem (Spring, Java EE, Android) weit verbreitet eingesetzt und ist der De-facto-Standard für das Mocking.
\n\nWichtige Funktionen:
\n- \n
- Erstellung von Mock-Objekten — Nachbildung jeder Klasse oder Schnittstelle. \n
- Definition des Verhaltens — Festlegung von Rückgabewerten, Auslösen von Ausnahmen. \n
- Verifizierung von Aufrufen — Überprüfung, ob Methoden mit bestimmten Parametern und der erforderlichen Anzahl aufgerufen wurden. \n
- Spy (teilweises Mocking) — Möglichkeit, ein reales Objekt zu verwenden, aber einzelne Methoden zu überschreiben. \n
- ArgumentCaptor (Erfassen von Argumenten) — Extrahieren von Parametern, die an eine Mock-Methode übergeben wurden, zur weiteren Überprüfung. \n
Installation von Mockito
\n\nDa Mockito eine Java-Bibliothek ist, wird sie nicht über pip oder npm installiert. Für die Einbindung in ein Projekt werden die Build-Systeme Maven oder Gradle verwendet.
\n\nMaven (pom.xml)
\n<dependency>\n <groupId>org.mockito</groupId>\n <artifactId>mockito-core</artifactId>\n <version>5.12.0</version>\n <scope>test</scope>\n</dependency>\n\n<!-- Für die Verwendung mit JUnit 5 -->\n<dependency>\n <groupId>org.mockito</groupId>\n <artifactId>mockito-junit-jupiter</artifactId>\n <version>5.12.0</version>\n <scope>test</scope>\n</dependency>\n\nGradle (build.gradle)
\ntestImplementation 'org.mockito:mockito-core:5.12.0'\ntestImplementation 'org.mockito:mockito-junit-jupiter:5.12.0'\n\nEs wird empfohlen, die neueste stabile Version zu verwenden, die zum Zeitpunkt der Erstellung der Tests aktuell ist.
\n\nSchnellstart: Codebeispiel
\n\nBetrachten wir ein einfaches Beispiel. Angenommen, wir haben eine Klasse UserService, die von UserRepository abhängt. Wir möchten UserService testen, ohne eine Datenbank zu starten.
// Repository-Klasse (Abhängigkeit)\npublic interface UserRepository {\n User findById(Long id);\n void save(User user);\n}\n\n// Service-Klasse (zu testen)\npublic class UserService {\n private final UserRepository userRepository;\n\n public UserService(UserRepository userRepository) {\n this.userRepository = userRepository;\n }\n\n public String getUserName(Long id) {\n User user = userRepository.findById(id);\n return user != null ? user.getName() : "Unknown";\n }\n}\n\n// Test mit Mockito\nimport org.junit.jupiter.api.Test;\nimport org.junit.jupiter.api.extension.ExtendWith;\nimport org.mockito.Mock;\nimport org.mockito.junit.jupiter.MockitoExtension;\n\nimport static org.mockito.Mockito.*;\nimport static org.junit.jupiter.api.Assertions.*;\n\n@ExtendWith(MockitoExtension.class)\npublic class UserServiceTest {\n\n @Mock\n private UserRepository userRepository;\n\n @Test\n public void testGetUserName() {\n // Erstellen eines Mock-Objekts für UserRepository (auch über die Annotation @Mock möglich)\n // UserRepository mockRepo = mock(UserRepository.class);\n\n // Verhalten festlegen: Bei Aufruf von findById(1L) einen Benutzer zurückgeben\n User mockUser = new User(1L, "Alice");\n when(userRepository.findById(1L)).thenReturn(mockUser);\n\n Auch in der Bibliothek
GraphQL in PHP: Bibliotheken webonyx/graphql-php und Lighthouse zur API-Erstellung
Symfony/Console für PHP: Komplette Anleitung mit Beispielen
Jasypt Java: Vollständige Anleitung mit Beispielen
Arbeit mit Bildern in Kotlin: Bibliotheken und Werkzeuge