Oneliner для тестирования содержимого std :: vector

Что является более удобным способом сделать это:

EXPECT_EQ(mock->params.size(), 2);
EXPECT_EQ(mock->params[0], "firstCall");
EXPECT_EQ(mock->params[1], "secondCall");

Одна из проблем, связанных с вышесказанным, заключается в том, что тестовые случаи будут аварийно завершаться при разработке, управляемой тестами, где размер mock-> params сначала будет равен нулю до того, как будет написан тестируемый код.

Кстати, мне не разрешено использовать GoogleMock, так как для этого нужны определенные флаги компилятора, которые я не могу использовать. Я могу использовать STD и Boost.

1

Решение

Вы можете попробовать использовать Boost.Assign. Например, список последовательность можно сравнить с вектором:

живое демо

#include <iostream>
#include <ostream>
#include <vector>
#include <boost/assign/list_of.hpp>
using namespace std;
using namespace boost::assign;

int main()
{
vector<int> v;
v.push_back(0);
v.push_back(1);
cout << (v == list_of(0)(1) ) << endl;
cout << (v == list_of(1) ) << endl;
cout << (v == list_of(1)(2) ) << endl;
}

Выход:

1
0
0
4

Другие решения

Не один лайнер, но должен делать то, что вы хотите:

std::vector<std::string> expected;
expected.push_back("firstCall");
expected.push_back("secondCall");
EXPECT_EQ(mock->params,expected);

В противном случае я бы рекомендовал использовать ASSERT_EQ() для первого теста, чтобы предотвратить падение вашего тестового примера, как @Rook заявляет в своем комментарии (для этого он и предназначен).

ОБНОВИТЬ:
Использование Boost Assign в качестве ответа @Evgeny Panasyuk предполагает, что это должно выглядеть так:

EXPECT_EQ(mock->params,list_of("firstCall")("secondCall"));

Если я правильно понял (это не так ясно из ответа, и я лично никогда не использовал это).

0

Ты можешь использовать Google MockБогатая библиотека соответствий (Google Mock — сопутствующая среда для насмешек Google Test) для написания четких тестовых утверждений:

#include <gtest.h>
#include <gmock.h>

using testing::ElementsAre;

TEST(Foo, Bar) {
EXPECT_THAT(mock->params, ElementsAre("firstCall", "secondCall"));
}

Это утверждение также дает четкое сообщение, когда проверяемое условие нарушается.

0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector