有如下类:
public class InnerClass {
public void print() {
System.out.println("Hello World");
} private class Inner {
private Inner() {
} public void printe() {
System.out.println("---------");
}
}
}
请问如何测试InnerClass$Inner?
我的初步想法如下,可是没有成功:
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;import junit.framework.TestCase;public class InnerClassTest extends TestCase { public void testPrint() {
new InnerClass().print();
}
public void testInnerClass() {
InnerClass iner = new InnerClass();
Class inerClass = iner.getClass();
Class[] in = inerClass.getDeclaredClasses();
for (Class c : in) {
System.out.println(c.getName());
}
Class clIner = in[0];
try {
Constructor constructor = clIner.getDeclaredConstructor();//这里会出错的,
constructor.setAccessible(true);
Method method = clIner.getMethod("printe", new Class[] {});
method.setAccessible(true);
constructor.newInstance(new Object[] {});
method.invoke(constructor.newInstance(new Object[] {}),
new Object[] {});
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class InnerClass {
public void print() {
System.out.println("Hello World");
} private class Inner {
private Inner() {
} public void printe() {
System.out.println("---------");
}
}
}
请问如何测试InnerClass$Inner?
我的初步想法如下,可是没有成功:
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;import junit.framework.TestCase;public class InnerClassTest extends TestCase { public void testPrint() {
new InnerClass().print();
}
public void testInnerClass() {
InnerClass iner = new InnerClass();
Class inerClass = iner.getClass();
Class[] in = inerClass.getDeclaredClasses();
for (Class c : in) {
System.out.println(c.getName());
}
Class clIner = in[0];
try {
Constructor constructor = clIner.getDeclaredConstructor();//这里会出错的,
constructor.setAccessible(true);
Method method = clIner.getMethod("printe", new Class[] {});
method.setAccessible(true);
constructor.newInstance(new Object[] {});
method.invoke(constructor.newInstance(new Object[] {}),
new Object[] {});
} catch (Exception e) {
e.printStackTrace();
}
}
}
public class IncludeInnerClass { private class Inner {
public void sayHello() {
System.out.println("Hello!");
}
} public class InnerTester extends TestCase { public void testSayHello() throws Exception {
Inner i = new Inner();
i.sayHello();
}
}
}
想问一下,是不是这种情况下的单元测试如果变成内部类了,就得修改原来的类,
能不能不修原来的被测试单元而实现呢?
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;import junit.framework.TestCase;public class InnerClassTest extends TestCase {
public void testPrint() {
new InnerClass().print();
} public void testInnerClass() {
InnerClass iner = new InnerClass();
Class inerClass = iner.getClass();
Class[] in = inerClass.getDeclaredClasses();
Class clIner = in[0];
try {
Constructor[] constructor = clIner.getDeclaredConstructors();
Constructor cons = constructor[0];
cons.setAccessible(true);
Method method = clIner.getMethod("printe", new Class[] {});
method.setAccessible(true);
method.invoke(cons.newInstance(new Object[] { iner }),
new Object[] {});
} catch (Exception e) {
fail("test error!");
}
}}