0

そのため、私はプロジェクトに取り組んでおり、メソッドが発生したParseExceptionときに a をキャッチするかどうかをテストする必要があります。テストする必要があるメソッドは次のようになります。

public void convertToModel(final BuildStone bs, final TextBuildStone model) {
    try {
        model.setBeginDateRange(ProjectDateConverter.projectDateToCalendarDefaultMin(bs.getFromDate(), true));
    } catch (final ParseException e) {
        SystemContext.getLogger().warning(
                this,
                "treatGeneralData",
                "Date not converted: {0}, BeginDate set at MinDate",
                bs.getFromDate());
        model.setBeginDateRange(CalendarConstants.getMinDate());
    }

したがって、このメソッドがいつキャッチするかをテストする必要がありParseExceptionます。

ParseException をスローするメソッドは ですprojectDateToCalendarDefaultMin。そのメソッドのコードは次のとおりです。

public static Calendar projectDateToCalendarDefaultMin(final BigDecimal dateValue, final boolean useMinDate) throws ParseException {
    return dateValue == null ? ProjectDateConverter.projectDateStringToCalendar(null, useMinDate, false) : ProjectDateConverter
            .projectDateStringToCalendar(dateValue.toString(), useMinDate, false);

ParseException をスローするメソッドが呼び出されprojectDateStringToCalendarます。これがどのように見えるかです:

private static Calendar projectDateStringToCalendar(final String dateValue, final boolean useMinDate, final boolean useMaxDate)
        throws ParseException {
    if (useMinDate && useMaxDate) {
        throw new IllegalArgumentException("useMinDate and useMaxDate may not be set as true ");
    }
    if (StringUtils.isEmpty(dateValue)) {
        if (useMinDate) {
            return CalendarConstants.getMinDate();
        } else if (useMaxDate) {
            return CalendarConstants.getMaxDate();
        } else {
            return null;
        }
    }
...
final GregorianCalendar gc = new GregorianCalendar();
    gc.setTime(new SimpleDateFormat("yyyyMMdd").parse(dateValue));

    return gc;
}

したがって、これがメソッドParseExceptionで最終的にスローされる場所です。パッケージからのもので、メソッド parse は次のようになります。parse()ParseExceptiontext.parse

 public Date parse(String source) throws ParseException
{
    ParsePosition pos = new ParsePosition(0);
    Date result = parse(source, pos);
    if (pos.index == 0)
        throw new ParseException("Unparseable date: \"" + source + "\"" ,
            pos.errorIndex);
    return result;
}

私がすでにやろうとしたことはbs.getFromDate、null に設定することですが、テストは常に赤になります。@Test(expected: ParseException.class)テストで注釈を使用しましたが、緑色にすることはできません。おそらくbs.getFromDate解析されている正しい値ではありませんか?

このテストを機能させる方法を他に知っている人はいますか? 前もって感謝します!

4

4 に答える 4

1

JUnit@Test(expected)アノテーションでは、スローされる例外を正確に指定する必要があります。

と仮定ParseExceptionしてNullPointerExceptionがスローされた場合、テストは失敗として表示されます。

@Test(expected = Exception.class)それがそれらすべてを処理するかどうか試してみてください。

于 2013-06-16T11:02:32.640 に答える
1

モック フレームワーク (Mockito、EasyMock など) を使用して projectDateToCalendarDefaultMin メソッドの呼び出しをモックし、ParseException をスローします。

事後条件アサーションは、モデルの beginDateRange プロパティが CalendarConstants.getMinDate() に設定されていることです。

于 2013-06-16T11:03:26.877 に答える
0

別の例外がスローされ、それをキャッチしていないと思います。つまり、このメソッドを呼び出すと:

projectDateToCalendarDefaultMin(final BigDecimal dateValue, final boolean useMinDate) throws ParseException {

あなたが得るnull値で、それがあなたのテストが赤い理由です。dateValueNullPointerExcpetion

于 2013-06-16T11:09:03.843 に答える