使用 Google 测试测试 Map<int, vector>
Testing Map<int, vector> with Google Test
这些在我的 class 的 Game
头文件中:
订单是另一个 class.
std::map<int, std::vector<Order>> ordersToBeExecuted;
std::map<int, std::vector<Order>> getOrdersToBeExecuted();
这是我的 cpp 文件中的定义:
std::map<int, std::vector<Order>> Game::getOrdersToBeExecuted()
{
return this->ordersToBeExecuted;
}
现在,我不知道如何测试它。我正在尝试 Google 测试。我正在写这篇文章,但目前,我收到一个错误:
#define EXPECT_EQ(val1,val2) EXPECT_PRED_FORMAT2(::testing::internal:: EqHelper<GTEST_IS_NULL_LITERAL_(val1)>::Compare, val1, val2)
Expands to:
EXPECT_PRED_FORMAT2(::testing::internal:: EqHelper<GTEST_IS_NULL_LITERAL_(std::map<0)>::Compare, std::map<0, std::vector<<Order>>)
expected a type specifier
TEST(gameTest, getOrdersToBeExecutedTest) {
std::map<int, std::vector<Order>> first;
std::vector<Order> orders;
Game g;
Order o1;
Order o2;
orders.push_back(o1);
orders.push_back(o2);
first[0] = orders;
g.setNumberOfPlayers(1);
EXPECT_EQ(std::map<0,std::vector<Order>>, g.getOrdersToBeExecuted());
}
编辑:
TEST(gameTest, getOrdersToBeExecutedTest) {
std::map<int, std::vector<Order>> first;
std::vector<Order> orders;
std::vector<Order> orders2;
Game g;
Order o1, o2;
Order o3, o4;
orders.push_back(o1);
orders.push_back(o2);
orders2.push_back(o3);
orders2.push_back(o4);
first[0] = orders;
first[1] = orders2;
//EXPECT_EQ(first, g.getOrdersToBeExecuted());
EXPECT_THAT(g.getOrdersToBeExecuted()), ElementsAre(Pair(0, ElementsAre(o1, o2)), Pair(1, ElementsAre(o3, o4)));
}
我正在尝试使用,但我仍然遇到这些错误:
#define EXPECT_THAT(value,matcher) EXPECT_PRED_FORMAT1( ::testing::internal::MakePredicateFormatterFromMatcher(matcher), value)
Expands to:
EXPECT_PRED_FORMAT1( ::testing::internal::MakePredicateFormatterFromMatcher(), g.getOrdersToBeExecuted())
identifier "EXPECT_THAT" is undefined
要使用容器匹配器测试容器,请参阅:https://github.com/google/googletest/blob/master/googlemock/docs/cheat_sheet.md
Map有点棘手,因为它是pairs的容器,所以你必须将它与Pair
匹配器结合起来,例如:
using testing::ElementsAre;
using testing::Pair;
EXPECT_THAT(g.getOrdersToBeExecuted()), ElementsAre(Pair(key1, val1), Pair(key1, val2)));
当值类型为vector
时,需要在里面放入容器匹配器:
using testing::ElementsAre;
using testing::Pair;
EXPECT_THAT(g.getOrdersToBeExecuted()), ElementsAre(Pair(key1, ElementsAre(e1, e2, e3)), Pair(key1, ElementsAre(e4, e5)));
这些在我的 class 的 Game
头文件中:
订单是另一个 class.
std::map<int, std::vector<Order>> ordersToBeExecuted;
std::map<int, std::vector<Order>> getOrdersToBeExecuted();
这是我的 cpp 文件中的定义:
std::map<int, std::vector<Order>> Game::getOrdersToBeExecuted()
{
return this->ordersToBeExecuted;
}
现在,我不知道如何测试它。我正在尝试 Google 测试。我正在写这篇文章,但目前,我收到一个错误:
#define EXPECT_EQ(val1,val2) EXPECT_PRED_FORMAT2(::testing::internal:: EqHelper<GTEST_IS_NULL_LITERAL_(val1)>::Compare, val1, val2)
Expands to:
EXPECT_PRED_FORMAT2(::testing::internal:: EqHelper<GTEST_IS_NULL_LITERAL_(std::map<0)>::Compare, std::map<0, std::vector<<Order>>)
expected a type specifier
TEST(gameTest, getOrdersToBeExecutedTest) {
std::map<int, std::vector<Order>> first;
std::vector<Order> orders;
Game g;
Order o1;
Order o2;
orders.push_back(o1);
orders.push_back(o2);
first[0] = orders;
g.setNumberOfPlayers(1);
EXPECT_EQ(std::map<0,std::vector<Order>>, g.getOrdersToBeExecuted());
}
编辑:
TEST(gameTest, getOrdersToBeExecutedTest) {
std::map<int, std::vector<Order>> first;
std::vector<Order> orders;
std::vector<Order> orders2;
Game g;
Order o1, o2;
Order o3, o4;
orders.push_back(o1);
orders.push_back(o2);
orders2.push_back(o3);
orders2.push_back(o4);
first[0] = orders;
first[1] = orders2;
//EXPECT_EQ(first, g.getOrdersToBeExecuted());
EXPECT_THAT(g.getOrdersToBeExecuted()), ElementsAre(Pair(0, ElementsAre(o1, o2)), Pair(1, ElementsAre(o3, o4)));
}
我正在尝试使用,但我仍然遇到这些错误:
#define EXPECT_THAT(value,matcher) EXPECT_PRED_FORMAT1( ::testing::internal::MakePredicateFormatterFromMatcher(matcher), value)
Expands to:
EXPECT_PRED_FORMAT1( ::testing::internal::MakePredicateFormatterFromMatcher(), g.getOrdersToBeExecuted())
identifier "EXPECT_THAT" is undefined
要使用容器匹配器测试容器,请参阅:https://github.com/google/googletest/blob/master/googlemock/docs/cheat_sheet.md
Map有点棘手,因为它是pairs的容器,所以你必须将它与Pair
匹配器结合起来,例如:
using testing::ElementsAre;
using testing::Pair;
EXPECT_THAT(g.getOrdersToBeExecuted()), ElementsAre(Pair(key1, val1), Pair(key1, val2)));
当值类型为vector
时,需要在里面放入容器匹配器:
using testing::ElementsAre;
using testing::Pair;
EXPECT_THAT(g.getOrdersToBeExecuted()), ElementsAre(Pair(key1, ElementsAre(e1, e2, e3)), Pair(key1, ElementsAre(e4, e5)));