単体テスト ケース用に再利用可能なテンプレート クラスを作成しようとしています。クラス 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;
}
}