privateなフィールドとメソッドをjUnitでテスト

対象クラス


public final class SQLUtil {
public static final Date MAX_DATE = Timestamp.valueOf( "9999-12-31 00:00:00.000000000" );
private Date WHERE_MAX_DATE;
public SQLUtil() {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd");
try {
this.WHERE_MAX_DATE = new Date(simpleDateFormat.parse(simpleDateFormat.format(this.MAX_DATE)).getTime());
} catch(ParseException e) {
this.WHERE_MAX_DATE = this.MAX_DATE;
}
}
private String replaceWildCard(String str) {
return (str == null || str.equals("")) ? "%": str.replace('*', '%').replace('?', '_');
}
}
テストクラス

public class SQLUtilTest extends TestCase {
public void testSQLUtil() throws Exception {
SQLUtil sqlUtil = new SQLUtil();
Field field = sqlUtil.getClass().getDeclaredField("WHERE_MAX_DATE");
field.setAccessible(true);
assertEquals((java.util.Date)field.get(sqlUtil), SQLUtil.MAX_DATE);
}
public void testReplaceWildCard() throws NoSuchMethodException,
IllegalAccessException, InvocationTargetException {
SQLUtil sqlUtil = new SQLUtil();
Method method = sqlUtil.getClass().getDeclaredMethod("replaceWildCard", String.class);
method.setAccessible(true);
assertEquals(method.invoke(sqlUtil, "?_*%"), "__%%");
}
}
こんな感じ