Gtest:“ {”之前的预期类名

Mat*_*ous 4 c++ gcc compiler-errors googletest

我试图将Gtest下的测试用例转换为使用测试夹具,以便在添加更多测试时可以有一个通用的设置。但是,这会导致错误:

test_integrate.cc:4:47: error: expected class-name before '{' token
  class IntegratorTest : public ::testing::test {
Run Code Online (Sandbox Code Playgroud)

我无法理解这种故障,因为它通常是由我的经验中的循环导入引起的,并且导入相对于工作代码没有变化。完整的代码如下:

#include "gtest/gtest.h"
#include "utils/integrate.hpp"

class IntegratorTest : public ::testing::test {
protected:
    Integrator integ;
    VectorXf v, xdot;
    float cur_time;

    virtual void SetUp() {
        integ = Integrator(1.0);
        v = VectorXf::Ones(10);
        xdot = VectorXf::Ones(10);
        cur_time = 0.0;
    }
};

TEST_F(IntegratorTest, Euler) {
    // Use e^t for a simple test algorithm
    for (short i = 1; i < 5; i++) {
        v = integ.Euler(v, xdot, cur_time);
        xdot *= 2.0;
        EXPECT_EQ(i, cur_time);
        EXPECT_EQ(xdot, v);
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我卸下固定装置并在测试用例中进行初始化设置,则代码可以正常编译。该工作代码如下。

#include "gtest/gtest.h"
#include "utils/integrate.hpp"

TEST(Integrate, Euler) {
    Integrator integ = Integrator(1.0);
    VectorXf v = VectorXf::Ones(10);
    VectorXf xdot = VectorXf::Ones(10);
    float cur_time = 0.0;

    // Use e^t for a simple test algorithm
    for (uint16_t i = 1; i < 5; i++) {
        v = integ.Euler(v, xdot, cur_time);
        xdot *= 2.0;
        EXPECT_EQ(i, cur_time);
        EXPECT_EQ(xdot, v);
    }
}
Run Code Online (Sandbox Code Playgroud)

我似乎找不到任何能解释如何解决此错误的信息,以便可以进行编译。

以防万一可能要编译,我正在运行通过Homebrew在最新的El Capitan OS X上安装的GCC 5.3.0。

Mar*_*n G 5

您要继承的类称为::testing::Test,而不是::testing::test

  • IBM 为错别字感到羞耻!请参阅此处:http://www.ibm.com/developerworks/aix/library/au-googletestingframework.html#list1 (2认同)