首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GoogleTest C++ -测试夹具

GoogleTest C++ -测试夹具
EN

Stack Overflow用户
提问于 2015-12-04 14:06:46
回答 1查看 1.9K关注 0票数 2

我是C++的初学者,正在为uni编写Snake代码,并且必须运行单元测试。FYI,我在Xcode 7.1.1上编码。

我设法使示例测试在我的机器上运行,但是当涉及到为我的蛇创建一个固定装置时,我遇到了一个问题。下面是我的代码:

代码语言:javascript
复制
#include "gtest/gtest.h"
#include "calc.h"
#include "Serpent.h"
#include "Map.h"
#include "Main.h"
using namespace std;
using namespace sf;

class Serpent_test_fixture: public ::testing::Test
{public:
Serpent* serpent_test;
Map* map_test;

Serpent_test_fixture(){
    serpent_test = new Serpent(true);
    RenderWindow window(VideoMode(WINDOW_WIDTH, WINDOW_HEIGHT, 32), "SnakeTest", Style::None);
    map_test = new Map("", window, false);
}

virtual void SetUp(){
    map_test->updateGameField(0, 0, HEAD_EAST);
    serpent_test->setHead(*map_test, false);
    int size_init = serpent_test->getSize();
}


virtual void TearDown(){

}

~Serpent_test_fixture(){
    delete serpent_test;
    delete map_test;
}  
};
TEST_F(Serpent_test_fixture, cherry_action)
{
map_test->updateGameField(0,0,CHERRY);
Tiles head_tile_test = HEAD_EAST;
serpent_test->fruit_action(*map_test, head_tile_test);
EXPECT_EQ(20, 20);
}
int main(int argc, char * argv[])
{
::testing::InitGoogleTest(&argc, argv);
return RUN_ALL_TESTS();
}

我的理解是,我从我的类蛇创建我的蛇(蛇用法语),然后我从我的类地图创建我的地图。

UpdateGameField更新映射(0,0)中的块并在其上放置"HEAD_EAST“。

总之,这是我要传达的信息:

代码语言:javascript
复制
Undefined symbols for architecture x86_64:
  "Map::updateGameField(int, int, Tiles)", referenced from:
      Serpent_test_fixture_test_cherry_action_Test::TestBody() in main.o
      Serpent_test_fixture::SetUp() in main.o
  "Map::Map(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, sf::RenderWindow const&, bool)", referenced from:
  Serpent_test_fixture::Serpent_test_fixture() in main.o
  "Map::~Map()", referenced from:
  Serpent_test_fixture::SetUp() in main.o
  Serpent_test_fixture::~Serpent_test_fixture() in main.o
  "Serpent::fruit_action(Map&, Tiles&)", referenced from:
  Serpent_test_fixture_test_cherry_action_Test::TestBody() in main.o
  "Serpent::getSize()", referenced from:
  Serpent_test_fixture::SetUp() in main.o
  "Serpent::setHead(Map, bool)", referenced from:
  Serpent_test_fixture::SetUp() in main.o
  "Serpent::Serpent(bool)", referenced from:
  Serpent_test_fixture::Serpent_test_fixture() in main.o
  "Serpent::~Serpent()", referenced from:
  Serpent_test_fixture::~Serpent_test_fixture() in main.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

有人能帮忙吗?这是我第一次使用谷歌测试,我很难让它发挥作用。

EN

回答 1

Stack Overflow用户

发布于 2015-12-09 22:20:23

这里的基本问题是如何编排测试项目相对于要测试的产品代码和测试框架的依赖关系。依赖关系驱动构建系统(编译器、链接器等)。

你可能想看看我的C++!2014年在C++中的测试驱动开发上的演讲。它使用Boost.Test而不是Boost.Test,但展示了一个基于CMake的配方,用于编排生产代码和测试代码之间的依赖关系。研讨会是为您设计的,您可以在您的计算机上跟随,复制演示文稿中的步骤--我提供您在每一步中使用的代码。

对于典型的测试项目,依赖项如下所示:

  • 测试可执行
    • 待测试的生产代码(静态库或共享库)
    • 测试框架

在我的研讨会材料中,我展示了如何使用CMake创建这些依赖关系,使用Boost.Test作为测试框架,但是原理与google相同,而且配方也几乎相同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34090175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档