2015-02-05 61 views
5

我正在使用GoogleTest版本1.7.0來測試我的C++應用程序。我有定義爲以下一個枚舉谷歌測試錯誤打印的枚舉類

namespace MyNamespace { 
    enum class MyEnum { 
     MyEnumValue, 
     MyEnumValue2 
    } 
} 

GoogleTest不正確地打印它的值,從而導致該錯誤消息時,測試失敗:

的值:MyClass.MyMethodThatReturnsEnum()

實際值: 4個字節的對象

預期:MyEnum :: MyEnumValue

哪個是:4字節對象< 02-00 00-00>

刪除關鍵字class會生成帶有enum實際值的正確錯誤消息。這是GoogleTest的一個已知行爲/錯誤嗎?有沒有辦法解決這個問題?

MyClass my_class; 

EXPECT_EQ(MyEnum::MyEnumValue, my_class.MyMethodThatReturnsEnum()); 

回答

1

的問題是可能是enum classes(正式命名範圍的枚舉)不一定有大小enums(正式命名爲未範圍枚舉)相同。

編譯器決定哪個大小適合您的枚舉。 Enum classes有一個默認大小。這就是爲什麼enum classes很容易轉發聲明。

它看起來像測試框架不區分這兩者。

+0

謝謝你的回覆,我很感激。但是,我仍然不明白爲什麼GoogleTest將枚舉值打印爲字節。它不應該只是一個比較?你能再詳細一點嗎? – Stefano 2015-02-05 14:55:23

+0

我對這個框架並不熟悉,但我猜想它會以這種方式打印所有對象。例如,一個64位的對象將被打印爲8個字節。如果我錯了,你可以糾正我。 – OlivierLi 2015-02-05 14:58:29

+0

此外,它打印消息的方式應該對EXPECT_EQ()函數沒有影響。 – OlivierLi 2015-02-05 14:59:09