2015-02-09 21 views
-1

我是一個採用C++類的新手程序員。爲什麼我不能使用CppUnitLite測試CHECK_DOUBLES_EQUAL

該任務是使用stringstream編寫一個double,然後使用CppUnitLite中的一個宏進行檢查。我想用CHECK_DOUBLES_EQUAL來檢查寫入操作中的double,但是VS中的intellisense說它不會工作。在下面的示例中,我已經離開了工作,一個簡單的CHECK_EQUAL。這還不夠好。我需要使用CHECK_DOUBLES_EQUAL作爲浮點。

我已經試過CHECK_DOUBLES_EQUAL(dvalue,svalue,0.1)但是不起作用。我也嘗試使用預期的實際值,但這也不起作用。

CHECK_DOUBLES_EQUAL確實可以用於讀取操作(第二個示例),但是我無法讓它在第一個工作。

這是爲什麼?我究竟做錯了什麼?

TEST(writeDouble, stringStream) 
{ 
    std::stringstream sValue; 
    double dvalue =34.9; 
    sValue << dvalue; 
    if (!sValue) 
    { 
     CHECK_FAIL("conversion failed"); 
    } 
    CHECK_EQUAL("34.9", sValue.str()); 
} 

TEST(readDouble, stringStream) 
{ 
    std::stringstream sValue("34.9"); 
    double dvalue; 
    sValue >> dvalue; 
    if (!sValue) 
    { 
     CHECK_FAIL("conversion failed"); 
    } 
    CHECK_DOUBLES_EQUAL(34.9, dvalue, 0.1); 
} 
+0

你還可以發佈CHECK_DOUBLES_EQUAL的代碼嗎? – APerson 2015-02-09 17:11:26

+1

什麼是CHECK_DOUBLE_EQUAL? – RedX 2015-02-09 17:11:31

+3

'CHECK_DOUBLES_EQUAL'不是標準的C++,也沒有向我們顯示它的功能,或者你的意思是「無法正常工作」,不幸的是我們可以做很多事情來幫助你。 – 2015-02-09 17:11:38

回答

1

問題是,在您的寫入操作中,您並未嘗試與雙倍比較:您正試圖與STRING進行比較。 C++是一種靜態類型語言,不會將字符串與double進行比較。

您使用的代碼CHECK_EQUAL("34.9", sValue.str());看起來是正確的代碼,用於確保stringstream正確解釋輸入雙精度值。

+0

@Mark Ransom OP明確指出'CHECK_DOUBLES_EQUAL'在第二個例子中很有效(使用'sValue >> dvalue'的那個) – 2015-02-09 17:21:33

+0

謝謝,在這種情況下,我真的不知道那時問題是什麼。會刪除我的評論。 – 2015-02-09 17:24:59

相關問題