Testen mit

http://www.vogella.com/tutorials/Mockito/article.html Warum testen?

Würde dies funktionieren, ohne es vorab zu testen? Definition von Tests

• Ein Softwaretest prüft und bewertet Software auf Erfüllung der für ihren Einsatz definierten Anforderungen und misst ihre Qualität. Die gewonnenen Erkenntnisse werden zur Erkennung und Behebung von Softwarefehlern genutzt. Tests während der Softwareentwicklung dienen dazu, die Software möglichst fehlerfrei in Betrieb zu nehmen. Arten von Tests • Unit-Test: Test der einzelnen Methoden einer Klasse

• Integrationstest: Tests mehrere Klassen / Module

• Systemtest: Test des Gesamtsystems (meist GUI-Test)

• Akzeptanztest / Abnahmetest: Test durch den Kunden, ob Produkt verwendbar

• Regressionstest: Nachweis, dass eine Änderung des zu testenden Systems früher durchgeführte Tests erneut besteht

• Feldtest: Test während des Einsatzes

• Lasttest

• Stresstest

• Smoke-Tests: (Zufallstest) nicht systematisch; nur Funktion wird getestet

Definitionen

• SUT … system under test

• CUT … class under test TDD - Test Driven Development

Test-Driven Development with Mockito, packt 2013 JUnit.org Hamcrest

• Hamcrest is a library of matchers, which can be combined in to create flexible expressions of intent in tests. They've also been used for other purposes

• http://hamcrest.org/

• https://github.com/hamcrest/JavaHamcrest

• http://www.leveluplunch.com/java/examples/hamcrest- collection-matchers--testing/

• http://grepcode.com/file/repo1.maven.org/maven2/ org.hamcrest/hamcrest-library/1.3/org/hamcrest/Matchers.java Test Doubles Warum Test-Doubles?

• A unit test should test a class in isolation. Side effects from other classes or the system should be eliminated if possible. The achievement of this desired goal is typical complicated by the fact that Java classes usually depend on other classes.

• To solve this, you can use test doubles. Test Doubles

Effective , Manning 2013, p.29 Test doubles

Test double

Dummy Fake Stub Mock

Spy - Funktionalität

http://www.vogella.com/tutorials/Mockito/article.html Dummy

• A dummy object is passed around but never used, i.e., its methods are never called. Such an object can for example be used to fill the parameter list of a method.

• Ein Objekt, das im Code weitergereicht, aber nicht verwendet wird. Werden eingesetzt um Parameter mit Werten zu befüllen [Wikipedia] Fake object

• Fake objects have working implementations, but are usually simplified, for example they use an in memory database and not a real database.

• Whereas a test stub can return hard-coded return values and each test may instantiate its own variation to return different values to simulate a different scenario, a fake object is more like an optimized, thinned-down version of the real thing that replicates the behavior of the real thing, but without the side effects and other consequences of using the real thing.

• Ein Objekt mit Implementierung. Die Implementierung ist dabei jedoch eingeschränkt, wodurch ein Einsatz in der Produktionsumgebung nicht möglich ist. Ein typisches Beispiel für ein Fake ist eine Datenbank, die Daten nur temporär im Speicher hält. [Wikipedia] Stub

• A stub class is an partial implementation for an interface or class with the purpose of using an instance of this stub class during testing. Stubs usually do responding at all to anything outside what's programmed in for the test. Stubs may also record information about calls

• A test stub’s (or just stub for short) purpose is to stand in for the real implementation with the simplest possible implementation. The most basic example of such an implementation would be an object with all of its methods being one-liners that return an appropriate default value.

• Ein Objekt, welches beim Aufruf einer bestimmten Methode unabhängig von der Eingabe die gleiche Ausgabe liefert. [Wikipedia]

• A mock object is a dummy implementation for an interface or a class in which you define the output of certain method calls.

• Mock objects are typically configured. Mock objects typically require less code to configure and should therefore be preferred.

• It’s an object that’s configured to behave in a certain way under certain circumstances. For example, a mock object for the User-Repository interface might be told to return null when findById() is invoked with the parameter 123 and to return a given instance of User when findById() is invoked with 124. At this point we’re basically talking about stubbing certain method calls, considering their parameters.

• Ein Objekt, das bei vorher bestimmten Funktionsaufrufen mit bestimmten übergebenen Werten eine definierte Rückgabe liefert. [Wikipedia] Mocking mockito.org Mockito Dependencies Stubbing Method Calls with Mockito Spy - Funktionalität mit verify(…)

Zuerst werden im gemockten Objekt zwei Methoden aufgerufen

Anschließend wird überprüft, ob diese Methoden aufgerufen wurden (inkl. korrektem Parameter) Example

• In der Liste wurde clear() 3 x aufgerufen

• add() wurde mind. einmal mit einem beliebigen Parameter aufgerufen

Mockito mit Stub

Eine einfache Funktionalität wird in das Mock Objekt implementiert

… und anschließend überprüft arrange-act-assert Stubbing Method’s returned value Mehrfacher Aufruf einer Methode Mit Eingangsparameter… anyInt() Exceptions Was ist der Unterschied zwischen assertThat(…) und verify(…)? Mocking eines Entity Managers

http://www.adam-bien.com/roller/abien/entry/ mocking_jpa_entitymanager_with_query to be continued … verify() @Mock @Spy Resources

• http://www.vogella.com/tutorials/JUnit/article.html

• https://www.jetbrains.com/idea/help/testing.html Noch Fragen?