Как прикрыть мой регистратор в предложении catch в junit - PullRequest
0 голосов
/ 09 октября 2018

Я пытаюсь выполнить полное тестирование Junit моего приложения, и я застрял, когда дело доходит до проверки сообщений регистратора.

try {
    fillParameters(args);
} catch (ArgumentException e) {
    logger.error(e.getMessage(), e);
    return;
}

Вот код, который вызывает исключение:

if (args.length > 3) {
    throw new ArgumentException("Wrong use of the command -> too many args"); 
}

Один тест:

@Test
public void testFillParametersWithTooManyArguments() {
    String[] args = { "...", "...", "...", "..." };
    Throwable e = null;
    try {
        testInstance.fillParameters(args);
    } catch (Throwable ex) {
        e = ex;
    }
    assertTrue(e instanceof ArgumentException); //this test is working as expected
}

, когда я смотрю на покрытие кода, logger.error (e.getMessage (), e);часть не покрыта, как я должен покрыть это?Я полагаю, я должен издеваться над регистратором?

1 Ответ

0 голосов
/ 09 октября 2018

Короткий ответ
Проверьте код, который вы действительно хотите проверить.

Некоторая информация
Код в вашем первом блоке кода находится вни один способ не проверяется кодом в вашем примере модульного тестаЯ предполагаю, что, поскольку он выглядит как код Java, а вопрос помечен как вопрос Java, код в первом блоке кода фактически находится где-то в методе.Этот метод необходимо объединить, чтобы получить тестовое покрытие в блоке перехвата исключений в этом методе.

Например:

public void IHateToTellPeopleMyMethodName(final String[] args)
{
    try
    {
        fillParameters(args);
    }
    catch (ArgumentException e)
    {
        logger.error(e.getMessage(), e);
        return;
    }
}

Чтобы получить тестовое покрытие блока перехвата в *Метод 1014 *, вы должны протестировать метод IHateToTellPeopleMyMethodName в своем модульном тесте.

Этот метод модульного тестирования ничего не делает для тестирования метода IHateToTellPeopleMyMethodName, поскольку он не вызывает метод IHateToTellPeopleMyMethodName.

@Test
public void testThatInNoWayTestsTheIHateToTellPeopleMyMethodNameMethod()
{
    String[] args = { "...", "...", "...", "..." };

    try
        {
        testInstance.fillParameters(args);
                fail("expected exception not thrown");
    }
        catch (Throwable ex)
        {
            assertTrue(e instanceof ArgumentException);
    }
}

В отличие от приведенного выше кода модульного теста, этот модульный тест охватывает метод IHateToTellPeopleMyMethodName.

@Test
public void testTheIHateToTellPeopleMyMethodNameMethod()
{
    String[] args = { "...", "...", "...", "..." };

    testInstance.IHateToTellPeopleMyMethodName(args);

          verify(mockLogger).error(
                eq(EXPECTED_MESSAGE_TEXT),
                    any(ArgumentException.class));
}

Редактировать примечание
Мои плохие, any() потребностиclass объект в качестве параметра, а не имя класса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...