c - 统一的安静输出?

标签 c unity-test-framework

我有 Grenning 的书。在第 20 页,他有一个统一示例的输出。它显示没有通过测试,只是“...”对于每个通过的测试。

我下载了统一源代码并在我的目标处理器的模拟器中运行它。我看到列出的每个测试用例 - 通过的和失败的。

我没有看到我可以在 unity.h 中定义的任何选项,这些选项只会打印出失败的测试用例和摘要。我有很多测试,我的标准输出窗口现在真的很乱。

我没有使用(在 auto 或 extras 目录中)的 generate test runner ruby​​ 脚本是否处理了一些魔法?还是我缺少一个基本选项。

这代表了我现在的输出结果

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

最佳答案

我修改了unity.c中的UnityConcludeTest()来解决这个问题。

是这样的:

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;
}

我还补充了 UNITY_PRINT_EOL; 在UnityTestResultsBegin和UnityEnd开头(本来就有的,我又加了一个)

成功了 + 它在每条消息之间放置了一个空格,使所有内容更具可读性。

关于c - 统一的安静输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30790779/

相关文章:

c - 带有编译器特定关键字的单元测试 C

c++ - 如何获取 libutils.so

c - 类型 "char (*)[16]"的参数与类型 "const char *"的参数不兼容

c - tcp消息通信

c - 如何使用 C 中的信号同步两个进程(子进程和父进程)?

c - 在 biicode 中使用仅 header 库

c++ - 检查加载的DLL是否是系统模块

我可以在 Ceedling 中循环运行测试吗?

c - 如何手动指定 Ceedling 无法获取的源文件?

c - 如何在 C 中模拟同一 UUT 中的函数