2017-04-10 92 views
0

我很喜欢使用Ceedling/Unity。我有一个模块,我正在测试,给它不同的输入测试点并检查输出值。但我需要多次这样做。这有点像我的尝试(使用“for”循环):我可以在Ceedling的循环中运行测试吗?

/*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测试。有趣的是,我可以通过循环打印预期和实际的所有值(因此循环完全执行)。那么,有没有办法在循环中进行测试?或者用其他方式迭代它?或者我打破了一些单元测试的规则?

谢谢。

回答

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

这会给你三个独立的测试。

+0

感谢您的回复。我试过这个,它效果很棒! –

相关问题