指针容器的元素匹配器
Gmock Element Matcher for Container of Pointers
在我的单元测试中,我想测试一个GameLauncher
基于CharacterSelections
创建一个包含一些Object
s的Game
。在java风格的伪代码中,测试将是:
Game game = gameLauncher.createGame(characterSelections);
assertThat(game.getObjects(), containsInAnyOrder(c1, c2, c3));
当我在c++中工作时,game->getObjects()
返回vector<Object*>
。我使用指针的矢量作为Object
是一个多态类型。
GMock#ContainerMatchers给出了一个容器的匹配器列表。由于STL容器使用operator==
来确定其元素之间的相等性(参见github/cpp-container-equality),我不能简单地使用UnorderedElementsAre(…),因为这将执行指针比较。
我有什么选择?
// redacted includes
class GameLauncherTest : public testing::Test {
// ... redacted ...
};
TEST_F(GameLauncherTest, launchesGameWithCharacterInstanceForSelectedCharacters) {
auto const characterSelections = new CharacterSelections();
characterSelections->add(new CharacterSelection(0, false, 1));
characterSelections->add(new CharacterSelection(3, false, 0));
characterSelections->add(new CharacterSelection(2, true, 1));
Game* const game = this->gameLauncher->launchGame(characterSelections);
auto const character0 = new Character(0, objectData1);
auto const character1 = new Character(1, objectData0);
auto const character2 = new Character(2, objectData1);
const vector<Object*> inGameObjects = game->getObjects();
// fails
EXPECT_THAT(inGameObjects, UnorderedElementsAre(character0, character1, character2));
delete character0;
delete character1;
delete character2;
delete characterSelections;
}
您可以使用Pointee
匹配器来解引用指针:
EXPECT_THAT(inGameObjects,
UnorderedElementsAre(Pointee(*character0),
Pointee(*character1),
Pointee(*character2)));
相关文章:
- 调整大小后指向元素值的指针unordered_map有效?
- 当该数组的索引中没有元素时,指针指向什么?
- 如何在基类指针向量的元素上应用重载的多态函数
- C++:添加新结构时,结构指针向量中的所有元素都会更新
- C++默认情况下,指针类型数组的元素是否保证初始化为 nullptr?
- 删除指针数组 (C++) 中的元素
- 从指向结构数组的指针中提取元素
- 指向数组基址的指针而不是指向第一个元素的指针有什么优点?
- 获取指向指针的指针元素 (c++)
- 经过最后一个数组元素末尾的指针是否应该等于超过整个数组末尾的指针?
- 存储指向动态数组元素的指针
- 通过作为指向 C++ 函数的指针传递来访问 std::array 元素的正确方法是什么?
- 如何使用指针C++将元素从2D数组复制到1D数组
- 如何将元素插入到标准::地图的共享指针中?
- C++通过别名指针以静默方式将错误的类型分配给数组元素
- 在删除之前更新一组元素指针中的元素
- 从 BST 中删除元素(指针错误)
- 避免强制转换容器的元素指针类型
- 填充一个无序的vector元素指针队列
- OpenCV元素指针如何存在于Obj-C类中