当我尝试从测试夹具引用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中的一个bug,或者就测试而言,这个场景有什么不同?
Test (泛型)编译
TEST(Construction, WHENObjectIsConstructedTHENAddressParameterIsStored) {
TC_mcp23s17 gpio_x(mcp23s17::HardwareAddress::HW_ADDR_6);
EXPECT_EQ(0x4C, gpio_x.getSpiBusAddress());
}测试夹具:编译
TEST_F(SPITransfer, WHENPinModeHasNotBeenCalledTHENTheCallersChipSelectPinIsHigh) {
TC_mcp23s17 gpio_x(mcp23s17::HardwareAddress::HW_ADDR_6);
EXPECT_EQ(HIGH, getPinLatchValue(SS));
}测试夹具(在gpio_x类中声明了gpio_x)失败
class SPITransfer : public ::testing::Test {
protected:
TC_mcp23s17 gpio_x(mcp23s17::HardwareAddress::HW_ADDR_6);
...
}
TEST_F(SPITransfer, WHENPinModeHasNotBeenCalledTHENTheCallersChipSelectPinIsHigh) {
EXPECT_EQ(HIGH, getPinLatchValue(SS));
}发布于 2015-03-28 20:44:19
类成员只能用=或{}初始化,而不能用()初始化。所以这两种方法中的任何一种都应该有效:
TC_mcp23s17 gpio_x=mcp23s17::HardwareAddress::HW_ADDR_6;
TC_mcp23s17 gpio_x{mcp23s17::HardwareAddress::HW_ADDR_6};这条非常无用的错误消息是因为编译器解释了使用()来表示函数声明,然后由于括号中的东西不是类型而感到困惑。
https://stackoverflow.com/questions/29321464
复制相似问题