Wie zu unterdrücken und zu überprüfen, private statische Methode Aufrufe?

Ich bin derzeit Stolperstein in JUnit-Tests und brauche etwas Hilfe. Also habe ich diese Klasse mit statischen Methoden, die Umgestaltung einiger Objekte. Der Vereinfachung halber habe ich ein kleines Beispiel. Dies ist meine Fabrik-Klasse:

class Factory {

    public static String factorObject() throws Exception {
        String s = "Hello Mary Lou";
        checkString(s);
        return s;
    }

    private static void checkString(String s) throws Exception {
        throw new Exception();
    }
}

Und dies ist mein Test-Klasse:

@RunWith(PowerMockRunner.class)
@PrepareForTest({ Factory.class })        
public class Tests extends TestCase {

    public void testFactory() throws Exception {

        mockStatic(Factory.class);
        suppress(method(Factory.class, "checkString"));
        String s = Factory.factorObject();
        assertEquals("Hello Mary Lou", s);
    }
}

Im Grunde das, was ich versuchte zu erreichen, dass die private Methode checkString() unterdrückt werden sollen (also die Exception wird nicht geworfen), und müssen auch sicherstellen, dass die Methode checkString() tatsächlich aufgerufen in der Methode factorObject().

AKTUALISIERT:
Die Unterdrückung funktioniert einwandfrei mit dem folgenden code:

suppress(method(Factory.class, "checkString", String.class));
String s = Factory.factorObject();

... aber es gibt mir NULL nach der Zeichenfolge "s". Warum ist das so?

IMHO haben Sie genommen das tool zu weit. Die Idee der Spott der Klasse unter test ist etwas, das entmutigt. Stattdessen sollte man die übergabe von Werten an Ihre zu testende Methode übergeben werden und fehlschlagen der Validierung durch check string. Dies ermöglicht Ihnen, vollständig zu testen das zu testende Methode, ohne sich auf deren Umsetzung. Was Sie entwerfen, sind spröde tests.
Ich Stimme mit Ihnen überein, aber derzeit gibt es keine Möglichkeit, ändern Sie den vorhandenen code, also die überprüfung muss passieren, ein bisschen komplizierter.

InformationsquelleAutor Malvin | 2013-05-09

Schreibe einen Kommentar