2015-12-18 71 views
0

我使用Visual Studio 2015的內置測試框架對以下C++代碼進行單元測試。當我運行下面的測試時,沒有發生錯誤(代碼編譯),但測試只是掛起。它僅在我已將註釋號averageGradient運行的註釋掉的行上執行。爲什麼是這樣?單元測試沒有失敗,但掛在子程序調用

float averageGradient(int x1, int x2) { 
    int i = 0, y1 = 0, y2 = 0; 
    while (i < graph.size() && (y1 == 0 || y2 == 0)) {  //if both y values haven't been solved then keep trying 
     if (x1 >= graph[i][0] && x1 < graph[i][1]) {  // if x1 lies in the first straight line segment 
      y1 = (graph[i][2] * x1) + graph[i][2];   // then calculate it's y value (y1) 
     } 
     else if (x2 >= graph[i][0] && x2 < graph[i][1]) { //try the same thing for x2 
      y2 = (graph[i][2] * x2) + graph[i][3];   //calculate its y value (y2) 
     } 
     else { i++; }          //otherwise incriment i to check the next straight line segment 
    } 
    float m = (y2 - y1)/(x2 - x1); 
    return m; 
}; 

單元測試:

TEST_METHOD(Average_Gradient) { 
     int x1 = 683675; 
     int x2 = x1 + 86400; 
     //float gradient = averageGradient(x1, x2); 
     float answer = 0.0000895684639; 
     //Assert::AreEqual(answer, gradient); 
    } 
+0

單元測試沒有任何關係。簡單地說,你的平均梯度計算函數掛起。 –

+0

@YeldarKurmangaliyev好吧,我會改變標記 - 不確定,因爲我對單元測試是新手。但是,代碼確實運行,所以爲什麼在測試時掛起? –

+0

函數是否可以在單元測試之外正確地調用? –

回答

2

。在你的代碼中的無限循環。這與單元測試無關。

float averageGradient(int x1, int x2) { 
    int i = 0, y1 = 0, y2 = 0; 
    while (i < graph.size() && (y1 == 0 || y2 == 0)) // 1 
    {  
     if (x1 >= graph[i][0] && x1 < graph[i][1])  // 2 
     {  
      y1 = (graph[i][2] * x1) + graph[i][2];  // 3  
     } 
     else if (x2 >= graph[i][0] && x2 < graph[i][1]) // 4 
     { 
      y2 = (graph[i][2] * x2) + graph[i][3];   
     } 
     else { i++; }          
    } 
    float m = (y2 - y1)/(x2 - x1); 
    return m; 
}; 
  1. 在循環的第一次迭代中,讓我們假設在行狀態標記爲// 2是真實的。
  2. 您輸入行// 3,並更改y1iy2未被修改。
  3. 現在你去下一個迭代。
    • i沒有改變,因此i < graph.size()仍然是true。
    • y2尚未更改,所以(y1 == 0 || y2 == 0)仍然如此。
  4. 因此,你去排隊// 2:條件爲真再次,既不x1也不graph[]值發生了變化。
  5. 執行進入// 3y1沒有被修改
  6. 執行處第3(無限循環)繼續

如果你的第一次迭代進入// 4代替// 2,同樣的事情發生。

您應該能夠通過在調試器下運行您的代碼來輕鬆分析這一點。

+0

謝謝你發現這個! –

+0

不客氣:) –

相關問題