Als ich junit mit Eclipse verwendet habe, hatte ich ein kleines Problem, daher werde ich die Einstellungsmethode als Memorandum beschreiben. Insbesondere kann der folgende Fehler auftreten, wenn die Testzielklasse einen privaten Konstruktor hat, sodass die Problemumgehung beschrieben wird.
The constructor Empty() is not visible
So testen Sie eine private Methode in Junit
[Methode abrufen, Methode mit Java Reflection API ausführen] (http://pppurple.hatenablog.com/entry/2016/07/23/205446)
OS:Windows8.1 32bit eclipse:4.5.2
TestTarget.java
packege com.web.test
public class TestTarget {
private TestTarget() {
//Keine Beschreibung
}
private int minus(int x, int y) {
return (x - y);
}
}
Erstellen Sie eine Junit-Testklasse für die zu testende Klasse
SampleTest.java
import static org.junit.Assert.*;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.junit.Test;
public class SampleTest {
@Test
public void test()
throws NoSuchMethodException,
SecurityException,
IllegalAccessException,
IllegalArgumentException,
InvocationTargetException
{
TestTarget testTarget = new TestTarget();
Method method = Sample.class.getDeclaredMethod("minus", int.class, int.class);
method.setAccessible(true);
int actual = (int)method.invoke(testTarget, 8, 2);
assertEquals(6, actual);
}
Wenn du das tust The constructor Empty() is not visible Ist aufgetreten, ändern Sie es wie folgt
SampleTest.java
import static org.junit.Assert.*;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import org.junit.Test;
public class SampleTest {
@Test
public void test()
throws NoSuchMethodException,
SecurityException,
IllegalAccessException,
IllegalArgumentException,
InvocationTargetException
{
//Vor der Korrektur
//TestTarget testTarget = new TestTarget();
//Überarbeitet
//Rufen Sie mithilfe der Reflection-API eine Instanz der zu testenden Klasse ab
TestTarget testTarget = Class.forName("com.web.test.TestTarget").newInstance();
Method method = testTarget.class.getDeclaredMethod("minus", int.class, int.class);
method.setAccessible(true);
int actual = (int)method.invoke(testTarget, 8, 2);
assertEquals(6, actual);
}
mit diesem The constructor Empty() is not visible Wurde gelöst
Recommended Posts