package org.test4j.tools.reflector;
import org.junit.Test;
import org.test4j.junit.Test4J;
import org.test4j.junit.annotations.DataFrom;
@SuppressWarnings({ "rawtypes", "unchecked" })
public class ReflectorTest_NewInstance extends Test4J {
@Test
@DataFrom("instance_data")
public void testNewInstance(Class claz) {
Object instance = reflector.newInstance(claz);
want.object(instance).notNull();
String result = ((ISayHello) instance).getName();
want.string(result).isNull();
}
public static Object[][] instance_data() {
return new Object[][] { { NoDefaultConstructor.class },// <br>
{ ISayHello.class } // <br>
};
}
@Test
public void testPrivateConstruction() {
Object instance = reflector.newInstance(PrivateConstructor.class);
want.object(instance).notNull();
String result = ((ISayHello) instance).getName();
want.string(result).isEqualTo("construction");
}
@Test
public void testNewInstance_AbstractClazz() {
try {
reflector.newInstance(AbstractClazz.class);
want.fail();
} catch (Exception e) {
String message = e.getMessage();
want.string(message).contains("unsupport").contains("abstract class");
}
}
@Test
public void zzz() {
System.out.println("============");
}
}
class NoDefaultConstructor implements ISayHello {
private String name = "defualt";
public NoDefaultConstructor(String name) {
this.name = name;
}
@Override
public String getName() {
return name;
}
}
class PrivateConstructor implements ISayHello {
private String name = "defualt";
private PrivateConstructor() {
this.name = "construction";
}
@Override
public String getName() {
return name;
}
}
abstract class AbstractClazz implements ISayHello {
private String name = "defualt";
private AbstractClazz(String name) {
this.name = name;
}
@Override
public String getName() {
return name;
}
}
interface ISayHello {
public String getName();
}