私は自分のシステムで単体テストが失敗している既存のコードをデバッグしていますが、同僚のシステムでは失敗していません。根本的な原因は、解析可能であるはずの日付を解析するときにSimpleDateFormatがParseExceptionsをスローしていることです。システムで失敗しているコードを示す単体テストを作成しました。
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.TimeZone;
import junit.framework.TestCase;
public class FormatsTest extends TestCase {
public void testParse() throws ParseException {
DateFormat formatter = new SimpleDateFormat("yyyyMMddHHmmss.SSS Z");
formatter.setTimeZone(TimeZone.getDefault());
formatter.setLenient(false);
formatter.parse(formatter.format(new Date()));
}
}
このテストは私のシステムでParseExceptionをスローしますが、他のシステムでは正常に実行されます。
java.text.ParseException: Unparseable date: "20100603100243.118 -0600"
at java.text.DateFormat.parse(DateFormat.java:352)
at FormatsTest.testParse(FormatsTest.java:16)
私はできることを発見しました、setLenient(true)
そして、テストは成功するでしょう。これsetLenient(false)
は、このテストが模倣する製品コードで使用されているものなので、変更したくありません。