我很擅长使用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);
}
}
虽然我看到测试通过(预期和实际都在delta内),但在整体测试总结中我看到了这个
--------------------
OVERALL TEST SUMMARY
--------------------
TESTED: 1
PASSED: 1
FAILED: 0
IGNORED: 0
这告诉我一个测试函数= 1个测试。有趣的是,我可以通过循环打印预期和实际的所有值(因此循环完全执行)。那么,有没有办法将测试放入循环中?或者以其他方式迭代它?或者我打破了一些单元测试规则?
感谢。
答案 0 :(得分:0)
我也在学习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);
}
这将为您提供三个单独的测试。