Тихий выход на единство?

У меня есть книга Греннинга. На странице 20 он имеет выход из примера единства. Это не показывает прохождение тестов, просто ". . ." для каждого прохождения теста.

Я скачал источник для Unity и запускаю его в симуляторе для моего целевого процессора. Я вижу все тестовые примеры в списке - прохождение и провал.

Я не вижу ни одного параметра, который я могу определить в файле unity.h, который бы печатал только неудачные тестовые случаи и сводку. У меня много тестов, и мое окно stdout сейчас действительно загромождено.

Это какая-то магия, которая обрабатывается с помощью сценария ruby ​​генерирования тестового запуска, который я не использую (в каталогах auto или extras)? Или есть основной вариант, который я пропускаю.

Это представитель того, как выглядит мой вывод

C:[path]\ut_main.c:80:test_fred_condition_foo:PASS
C:[path]\ut_main.c:85:test_fred_condition_bar:FAIL: Expected 1
C:[path]\ut_main.c:90:test_fred_condition_baz:PASS
C:[path]\ut_main.c:95:test_fred_condition_qux

-----------------------
4 Tests 1 Failures 0 Ignored
FAIL

Я бы предпочел, чтобы это было так:

.
C:[path]\ut_main.c:85:test_fred_condition_bar:FAIL: Expected 1
. . 

-----------------------
4 Tests 1 Failures 0 Ignored
FAIL

1 ответ

Решение

Я модифицировал UnityConcludeTest() in unity.c to solve this problem.

Это было так:

void UnityConcludeTest(void)
{
    if (Unity.CurrentTestIgnored)
    {
        Unity.TestIgnores++;
    }
    else if (!Unity.CurrentTestFailed)
    {
        UnityTestResultsBegin(Unity.TestFile, Unity.CurrentTestLineNumber);
        UnityPrint(UnityStrPass);
    }
    else
    {
        Unity.TestFailures++;
    }

    Unity.CurrentTestFailed = 0;
    Unity.CurrentTestIgnored = 0;
    UNITY_PRINT_EOL;
}

Я изменил это на это

void UnityConcludeTest(void)
{
    if (Unity.CurrentTestIgnored)
    {
        UNITY_PRINT_EOL;
        Unity.TestIgnores++;
    }
    else if (!Unity.CurrentTestFailed)
    {
#ifdef UNITY_QUIET
        UnityPrint(".");
#else
        UnityTestResultsBegin(Unity.TestFile, Unity.CurrentTestLineNumber);
        UnityPrint(UnityStrPass);
        UNITY_PRINT_EOL;            
#endif
    }
    else
    {
        UNITY_PRINT_EOL;
        Unity.TestFailures++;
    }

    Unity.CurrentTestFailed = 0;
    Unity.CurrentTestIgnored = 0;
}

I also added UNITY_PRINT_EOL; в начале UnityTestResultsBegin and UnityEnd (there was already one, I added another).

That did the trick + it put a blank space between each message to make everything more readable.

Другие вопросы по тегам