我正在嘗試爲我的單元測試用例創建一個可重用的模板類。假設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