GoogleTest C ++ - 测试夹具

时间:2015-12-04 14:06:47

标签: c++ unit-testing googletest

我是C ++的初学者,正在编写Snake for uni,并且必须运行单元测试。 仅供参考,我在Xcode 7.1.1上编码。

我设法在我的机器上运行样品测试,但是在为我的蛇创建一个夹具时遇到了问题。这是我的代码:

.chapter .front,
.chapter .back {
  width: 100%;
  height: 100%;
  -webkit-backface-visibility: hidden;
  -moz-backface-visibility: hidden;
  -o-backface-visibility: hidden;
  -ms-backface-visibility: hidden;
  backface-visibility: hidden;
  -webkit-transition-duration: .75s;
  -moz-transition-duration: .75s;
  -o-transition-duration: .75s;
  -ms-transition-duration: .75s;
  transition-duration: .75s;
  -webkit-transform-style: preserve-3d;
  -moz-transform-style: preserve-3d;
  -o-transform-style: preserve-3d;
  -ms-transform-style: preserve-3d;
  transform-style: preserve-3d;
  -webkit-transform-origin: 0 0;
  -ms-transform-origin: 0 0;
  -moz-transform-origin: 0 0;
  position: absolute;
  top: 0;
  left: 0;
  box-shadow: 0 0 0 1px #ccc;
}

我理解它的方式是,我从我的班级蛇创建我的蛇(法语蛇),然后我从我的班级地图创建我的地图。

#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(); } 更新地图(0,0)中的图块并在其上放置“HEAD_EAST”。

无论如何,这是我的信息:

UpdateGameField

有人可以帮忙吗?这是我第一次使用Google测试,而且我很难让它发挥作用。

1 个答案:

答案 0 :(得分:1)

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

你可能想看一下我的C ++吧! 2014年Test-Driven Development in C++的演讲。它使用Boost.Test而不是谷歌测试,但显示了基于CMake的配方,以协调生产代码和测试代码之间的依赖关系。该研讨会旨在让您在计算机上进行操作,复制演示文稿中的步骤 - 我提供您在每个步骤中使用的代码。

对于典型的测试项目,依赖关系看起来像这样:

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

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