2017-04-10 49 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

感謝您的回覆。我試過這個,它效果很棒! –

相關問題