1

私のストーリーステップは次のようなものです:

When the user selects '<past>' date in field start date
When the user selects '<future>' date in field start date

ステップJavaファイルの対応するメソッドは

@When("the user selects '$datevalue' date in field $field")
public void selectDate(Date dateValue, String fieldName) {
...
}

カスタマイズされた日付コンバーター

parameterConverters.addConverters(new ParameterConverters.DateConverter() {

    @Override
    public Object convertValue(String value, Type type) {
        if (value.equals("<future>")){
            Calendar cal = GregorianCalendar.getInstance();
            cal.add(Calendar.DAY_OF_YEAR, 1);
            return cal.getTime();
        } else if (value.equals("<past>")){
            Calendar cal = GregorianCalendar.getInstance();
            cal.add(Calendar.DAY_OF_YEAR, -1);
            return cal.getTime();
        }
        try {
            return new SimpleDateFormat("yyyy-MM-dd").parse(value);
        } catch (ParseException e) {
            throw new ParameterConvertionFailed("Failed to convert value "
                    + value + " with date format yyyy-MM-dd", e);
        }
    }

    @Override
    public boolean accept(Type type) {
        if (type instanceof Class<?>) {
            return String.class.isAssignableFrom((Class<?>) type);
        }
        return false;
    }
});

しかし、カスタマイズされた日付コンバーターは効果がありません。エラー org.jbehave.core.steps.ParameterConverters$ParameterConvertionFailed: Failed to convert value with date format dd/MM/yyyy が発生するため、デフォルトの実装が常に実行されるようです。

何か案が?

4

1 に答える 1

0

あなたの例を実行すると、あなたと同じエラーが発生します。これは、accept-method が原因で、より正確には次の行が原因で発生します。

return String.class.isAssignableFrom((Class<?>) type);

メソッドがどのように機能するのか正確にはわかりません (JBehave の Javadoc はここでは役に立ちません)。この問題を解決するには、次の 2 つの方法があります。

1 つは、accept-method をオーバーライドしないことです。もう 1 つは、accept-method を次のように変更することです。

@Override
public boolean accept(Type type)
{
    if (type instanceof Class<?>)
    {
        return Date.class.isAssignableFrom((Class<?>) type);
    }
    return false;
}
于 2013-10-07T14:56:35.353 に答える