我正在尝试为我的单元测试用例创建一个可重用的模板类。假设Sample Sample和SampleTest属于同一个包,而Template属于不同的包。我得到错误实例化Sample类。我期望该方法将被执行,就好像它是可以访问Sample的SampleTest类的方法一样。有没有办法做到这一点?超类访问另一个包中的默认类
public SampleTest extends Template<Sample> {
public void testMethod() {
getTarget().method();
}
}
public class Template<T> extends TestCase {
/** Spied, object instance to test. */
private transient T targetObject;
/** Test class type to be derived as parameter type of test subclass. */
private transient final Class<T> targetType;
@Override
public void setUp() throws Exception
{
super.setUp();
setupTargetObject();
}
protected void setupTargetObject()
{
final T realObject = targetType.newInstance(); //ERROR here if class under test is non-public
targetObject = Mockito.spy(realObject);
}
protected Template() {
final ParameterizedType paramedType = (ParameterizedType) getClass().getGenericSuperclass();
targetType = (Class<T>) paramedType.getActualTypeArguments()[0];
}
protected T getTarget()
{
return targetObject;
}
}
什么错误信息? – starblue 2013-02-11 09:08:53
试试这个。 '构造函数> c = targetType.getConstructors()[0]; c.setAccessible(真);对象realObject = c.newInstance();' – sundar 2013-02-11 09:19:59
谢谢你,工作。我有点困惑,因为我在发布之前尝试过,并得到安全异常。好吧。 – 2013-02-11 09:38:15