Могу ли я запустить тест в цикле в 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 тест. Интересно, что я могу напечатать все значения ожидаемых и фактических значений в цикле (поэтому цикл выполняется полностью). Итак, есть ли способ поставить тест в цикле? Или повторить это другим способом? Или я нарушаю какое-то правило юнит-тестирования?

Благодарю.

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

Это даст вам три отдельных теста.

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