C语言 我可以在 Ceedling 的循环中运行测试吗?



我对使用Ceedling/Unity很陌生。我有一个模块,我正在通过给它不同的输入测试点并检查输出值来测试它。但我需要这样做很多次。这类似于我尝试的(使用"for"循环(:

/*Example Code*/
void test_whenInputIsThis_thenOutputIsThat(void)
{
    for(i=0;i<ITERATIONS;i++)
    {
    /*Everything is declared & initialized as required*/
    inputA = inputA_array[i];
    inputB = inputB_array[i];
    expected = expectedValues_array[i];
    ModuleUnderTest(inputA, inputB);
    TEST_ASSERT_FLOAT_WITHIN(delta, expected, actual);
    }
}

尽管我看到通过的测试(预期和实际都在增量内(,但在总体测试摘要中,我看到了这个

--------------------
OVERALL TEST SUMMARY
--------------------
TESTED:  1
PASSED:  1
FAILED:  0
IGNORED: 0

这对我来说表明一个测试函数 = 1 个测试。有趣的是,我可以通过循环打印预期和实际值的所有值(因此循环完全执行(。那么,有没有办法让测试循环?还是以其他方式迭代它?还是我违反了单元测试的某些规则?

谢谢。

我也在学习 Ceedling,但通常测试运行者将他们发现的每个功能视为一个测试。如果你有一个测试输入和输出的静态数组,你可以在测试文件中编写一个没有test_前缀的帮助程序函数,比如

void runMyTest(int index)
{
    float delta = MIN_DELTA;
    actual = ModuleUnderTest(inputA_array[index], inputB_array[index]);
    TEST_ASSERT_FLOAT_WITHIN(delta, expected[index], actual);
}
void test_state1(void)
{
    runMyTest(1);
}
void test_state2(void)
{
    runMyTest(2);
}
void test_state3(void)
{
    runMyTest(3);
}

这将为您提供三个单独的测试。