Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/huluvu424242/jmockit.example

Testbeispiele mit jMockit
https://github.com/huluvu424242/jmockit.example

Last synced: 27 days ago
JSON representation

Testbeispiele mit jMockit

Awesome Lists containing this project

README

        

[#status]
image:https://maven-badges.herokuapp.com/maven-central/com.github.funthomas424242/jmockit.example/badge.svg?style=flat["Maven Central", link="https://maven-badges.herokuapp.com/maven-central/com.github.funthomas424242/jmockit.example"]
image:https://api.bintray.com/packages/funthomas424242/funthomas424242-libs/jmockit.example/images/download.svg[link="https://bintray.com/funthomas424242/funthomas424242-libs/jmockit.example/_latestVersion"]
image:https://travis-ci.org/FunThomas424242/jmockit.example.svg?branch=master["Build Status", link="https://travis-ci.org/FunThomas424242/jmockit.example"]
image:https://api.codacy.com/project/badge/Grade/9d68d28fb95b4db8807834f8e90075a7[link="https://app.codacy.com/app/FunThomas424242/jmockit.example?utm_source=github.com&utm_medium=referral&utm_content=FunThomas424242/jmockit.example&utm_campaign=Badge_Grade_Dashboard"]
image:https://codecov.io/gh/FunThomas424242/jmockit.example/branch/master/graph/badge.svg[link="https://codecov.io/gh/FunThomas424242/jmockit.example"]
image:http://images.webestools.com/buttons.php?frm=2&btn_type=11&txt=Scrum Board["Scrum Board,scaledwidth="15%"", link="https://github.com/FunThomas424242/jmockit.example/projects/1"]

== jmockit.example
Testbeispiele mit jmockit

=== Hinweise
jmockit arbeitet mit Instrumentierung des ByteCodes.

=== Erkenntnisse

* @Tested Objekte sind zunächst mal keine Mocks und ergo kann auch kein Mock Verhalten definiert werden.
Das lässt sich aber mit folgender Konstruktion bedingt ändern:

.Constructor.java
[source, java]
----
new Expectations() {
{
new MockUp() {
@Mock
public void $init(Invocation invocation, String bezeichnung) { (1)
((Familie) invocation.getInvokedInstance()).id = 56;
}
};
}
};

(1) Die Parameter können leider nicht für den Konstruktor benutzt werden, da nur noch der Standardkonstruktor unterstützt wird (Deencapsulation wird nicht mehr unterstützt).
----

Hierbei wird das Objekt über einen Standardkonstruktor erzeugt und dann einzelne Felder im Innern mit Werten gesetzt. Das klappt aber nur wenn die zu setzenden Felder nicht final sind.
Im Beispiel führt das dazu, dass durch die einfache Erzeugung einer Familieninstanz auch eine id innitialisiert wird.
.ConstructorTest.java
[source, java]
----
final Familie familie = new Familie("Graf von Blasius");
// Wurde beim new über das MockUp gesetzt
assertEquals(56, familie.id);
// Es können nur nicht finale Felder gesetzt werden
assertNull(familie.sippenBezeichnung);
----
* In den Expectations können Annahmen definiert werden, die beschreiben bei welchem Aufruf das Mock welchen Wert liefert.

.CallTest.java
[source, java]
----
new Expectations() {
{
person.getAlter();
result = 1;
result = 2;
result = 3;
times = 3;
}
};
----

* Zusammenarbeit mit JaCoCo

.pom.xml
[source, xml]
----


${argLine} -javaagent:${settings.localRepository}/org/jmockit/jmockit/${jmockit.version}/jmockit-${jmockit.version}.jar=coverage (1)

(1) ${argLine} war die Lösung: https://stackoverflow.com/questions/18107375/getting-skipping-jacoco-execution-due-to-missing-execution-data-file-upon-exec
----

=== Quellen

* http://jmockit.github.io/tutorial/Introduction.html#isolation
* http://jmockit.github.io/tutorial/Mocking.html
* https://www.baeldung.com/jmockit-101
* https://www.baeldung.com/jmockit-expectations
* https://www.baeldung.com/jmockit-advanced-usage