Могу ли я запустить тест в цикле в 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);
}
Это даст вам три отдельных теста.