Als ich mir den heute in JUnit geschriebenen Testcode ansah, wurde der Test für die private Methode nicht geschrieben. Ich habe ein Beispiel erstellt, das eine private Methode aufruft, und dachte, ich würde es veröffentlichen.
Nachtrag Einzelheiten finden Sie in @ Kilisames Kommentar, aber es ist kein Artikel, der besagt, dass ich ihn getestet habe, weil ich vergessen habe, privat zu testen. Es ist schwer zu sagen, dass der öffentliche Test des Anrufers nicht durchgeführt werden kann ... (Ich möchte, dass Sie das verstehen), also habe ich ihn geschrieben, weil ich zumindest einen privaten Test machen wollte.
import static org.junit.Assert.*;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.junit.Test;
/**Beispielklasse*/
public class private_Test {
public class Sample{
private int fuge(int i) {
return i;
}
}
@Test
public void test() {
Sample sample = new Sample();
try {
Method method = Sample.class.getDeclaredMethod("fuge", int.class);
method.setAccessible(true);
int rtn = (int)method.invoke(sample, 2);
assertEquals(2,rtn);
} catch (NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
//TODO automatisch generierter Fangblock
e.printStackTrace();
}
}
}
Sie können die Methode mit der Methode getDeclaredMethod () abrufen, den externen Zugriff mit setAccessible (true) zulassen und mit method.invoke () ausführen.
Recommended Posts