Java-Projekte automatisch erzeugen

Es gibt praktische Software und dann gibt es manchmal Anwendungen bei denen man sich fragt was genau der Anwendungszweck ist. Eine dieser Anwendungen ist der Java Bullshifier. Die einzige Aufgabe des Java Bullshifier ist es, riesige Java-Projekte zu erzeugen.

Die Projekt-Webseite

Selbst im Vorstellungsartikel des Tools wird die Meinung vertreten, das es ein wenig esoterisch wirkt. Im Artikel wird allerdings ebenfalls die Motivation bzw. die Nutzung des Tools beschrieben:

It’s used in order to test some of our monitoring capabilities over ridiculously large code bases, with transactions that go thousands of calls deep, over thousands of classes, and end up with exceptions.

Erzeugt werden ein Projekt mit einer beliebigen Anzahl an Klassen und für eine Klasse sieht der generierte Quelltext exemplarisch wie folgt aus:

package generated.afz.qen.lrlj;

import helpers.Config;
import helpers.Context;
import java.util.*;
import java.util.logging.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;

public class ClsTvxlbccvg
{
    public static final int classId = 325;
    static final Logger logger = LoggerFactory.getLogger(ClsTvxlbccvg.class);

    public static void metWrkbglgpwrbj(Context context) throws Exception
    {
        int methodId = 0;
        Object[] root = new Object[8];
        Map<Object, Object> valUmbeeuzlkcg = new HashMap();
        Object[] mapValTaglolagfcm = new Object[10];
        String valLjtuhkvukba = "StrHwrvspzqwyp";

        mapValTaglolagfcm[0] = valLjtuhkvukba;
    
        for (int i = 1; i < 10; i++)
        {
            mapValTaglolagfcm[i] = Config.get().getRandom().nextInt(1000);
        }

        Set<Object> mapKeyGfqzkkkweud = new HashSet<Object>();
        long valZqatretqosu = 2690648861024756176L;

Der Quelltext des Java Bullshifier ist auf GitHub zu finden. Er ist unter der MIT-Lizenz lizenziert und damit freie Software.

Globales @Before in JUnit

Wenn man unter JUnit für mehrere Tests einige vorbereitende Schritte benötigt, so kann man dafür die @Before Annotation nutzen:

@Before
public void setup() {
    // Prepare something
}

Das Problem an dieser Methode ist, das dass ganze auf eine Klasse beschränkt ist. Benötigt man die vorbereitenden Schritte in mehreren Klassen, so muss man sich unter JUnit 4 anders behelfen. Dort führt die Lösung über eine abstrakte Klasse:

public abstract class TestBase {
    @Before
    public void setup() {
        // Prepare something
    }
}

Von dieser Klasse können die Klassen mit den Testfällen abgeleitet werden. Allerdings muss man beachten, das es hierbei zu doppelter Initialisierung kommen kann. Unter JUnit 5 kann man dies nun wesentlich einfacher lösen. Dort gibt es die neue Annotation @BeforeAll:

@BeforeAll
public void setup() {
    // Prepare something
}

Mit diese Annotation wird die Initialisierung vor der Ausführung der Tests durchgeführt.

Tests bei Maven überspringen

Wenn man unter Maven mittels:

mvn package

mal schnell ein Paket bauen möchte ohne das dabei die komplette Testsuite eines Paketes ausgeführt wird, kann dies durch den Parameter:

-Dmaven.test.skip=true

erreichen. Alternativ kann der Parameter gekürzt werden:

-Dmaven.test.skip

Komplett würde das ganze dann so aussehen:

mvn package -Dmaven.test.skip

Reguläre Ausdrücke online testen

Reguläre Ausdrücke sind mächtig. Wenn man einen solchen Ausdruck entwickelt z.B. um eine Zeichenkette zu extrahieren, ist es enorm hilfreich das ganze zeitnah zu debuggen. Mit der Webseite regexr.com gibt es dafür einen Dienst mit welchem eigene reguläre Ausdrücke schnell überprüft und getestet werden können. Dabei wird der Ausdruck auf der Seite eingegeben und anschließend gegen den angegebenen Text überprüft.

regexr.com

regexr.com

Daneben bietet der Dienst eine Reihe von Zusatzfunktionalitäten, wie die von Nutzern befüllte Bibliothek von regulären Ausdrücken für bestimmte Funktionalitäten. Der Quelltext des Dienstes ist auf GitHub zu finden – er ist unter der MIT-Lizenz lizenziert und damit freie Software.

Willkommen im besten Netz – nicht

Vor einigen Wochen bin ich von o2 zu congstar gewechselt – dabei handelt es sich um einen Mobilfunkdiscounter, welcher eine hundertprozentige Tochterfirma der Deutschen Telekom ist. Damit ist man im Netz der Deutschen Telekom (D1-Netz) unterwegs, was ja vielfach als das beste Netz Deutschlands gepriesen wird – unter anderem auf Grund des Netztestes der Zeitschrift connect.

Das beste Netz?

Das beste Netz?

Während es bei o2 genau eine Stelle auf meinem Heimweg gab, bei welcher die Verbindung abbrach – ansonsten aber das Netz halbwegs benutzbar war, bekomme ich seitdem öfter als mir lieb ist ein Kein Netz auf meinem Telefon angezeigt. Das fängt bei der Arbeit an (dort findet man selbst im Freien nur selten Netz), ist öfter beim Heimweg zu sehen und selbst zu Hause gibt es Zonen ohne Netz. Eine Ursache für das Problem ist sicherlich die Nutzung von LTE seitens Congstar – es wird schlicht nicht genutzt. Congstar selbst äußert sich auf der Webseite dazu:

congstar nutzt das Netz Mobilfunknetz der Deutschen Telekom, hat aber keine eigenen LTE-Tarife im Angebot. Stattdessen bieten wir unsere günstigen Mobilfunktarife zum Telefonieren, Simsen und Surfen in HSDPA-Speed an, die je nach Surfverhalten völlig ausreichend sind.

Die eigentlich gute Netzabdeckung wird damit Makulatur. Auf der Webseite von congstar wird hauptsächlich darauf eingegangen, das LTE nicht automatisch höhere Geschwindigkeit bedeutet – aber ohne Netz nutzt eine hohe Geschwindigkeit per UMTS nichts. Das es mit congstar kein LTE gibt, hat wahrscheinlich marketingtechnische Gründe – es ist ein Abgrenzungskritierum gegenüber den Tarifen der Deutschen Telekom. Natürlich kann man direkt zur Deutschen Telekom wechseln – allerdings sind die Tarife aus monetärer Sicht nicht das gelbe vom Ei. Während man bei o2 selbst bei kleinen Tarifen LTE bekommt, sieht es bei congstar – trotz ansonsten attraktiver Angebote – auf absehbare Zeit düster aus.