GoogleTest 1.7.0`enum class`编译错误

时间:2015-03-28 19:17:01

标签: c++ enums googletest googlemock enum-class

当我尝试从测试夹具中引用enum class时,它无法编译错误./gtest_mcp23s17.cpp:25:52: error: no type named 'HW_ADDR_6' in 'mcp23s17::HardwareAddress' TC_mcp23s17 _gpio_x(mcp23s17::HardwareAddress::HW_ADDR_6); ~~~~~~~~~~~~~~~~~~~~~~~~~~~^

但是,如果我将引用留在测试本身(保留所有其他代码未触及),它将无错误地编译并按预期运行测试。这是GoogleTest中的一个错误,或者就测试而言,这个方案有何区别?

测试 (通用) [编译]

TEST(Construction, WHENObjectIsConstructedTHENAddressParameterIsStored) {
    TC_mcp23s17 gpio_x(mcp23s17::HardwareAddress::HW_ADDR_6);
    EXPECT_EQ(0x4C, gpio_x.getSpiBusAddress());
}

测试夹具: [COMPILES]

TEST_F(SPITransfer, WHENPinModeHasNotBeenCalledTHENTheCallersChipSelectPinIsHigh) {
    TC_mcp23s17 gpio_x(mcp23s17::HardwareAddress::HW_ADDR_6);
    EXPECT_EQ(HIGH, getPinLatchValue(SS));
}

测试夹具 (在夹具类中声明gpio_x) [FAILS]

class SPITransfer : public ::testing::Test {
  protected:
    TC_mcp23s17 gpio_x(mcp23s17::HardwareAddress::HW_ADDR_6);
    ...
}
TEST_F(SPITransfer, WHENPinModeHasNotBeenCalledTHENTheCallersChipSelectPinIsHigh) {
    EXPECT_EQ(HIGH, getPinLatchValue(SS));
}

1 个答案:

答案 0 :(得分:0)

只能使用={}初始化类成员,而不是()。所以这些都应该有效:

TC_mcp23s17 gpio_x=mcp23s17::HardwareAddress::HW_ADDR_6;
TC_mcp23s17 gpio_x{mcp23s17::HardwareAddress::HW_ADDR_6};

相当无用的错误消息是因为编译器解释使用()来表示函数声明,然后混淆,因为括号内的东西不是类型。