2

これを行うためのより便利な方法は何ですか:

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

上記の問題の1つは、テスト駆動開発を行うときにテストケースがクラッシュすることです。この場合、テスト対象の実際のコードが書き込まれる前に、mock->paramsのサイズが最初にゼロになります。

ところで、使用できない特定のコンパイラフラグが必要なため、GoogleMockの使用は許可されていません。stdとboostを使用できます。

4

3 に答える 3

4

Boost.Assignを使用してみてください。たとえば、list_ofシーケンスは vector と比較できます。

ライブデモ

#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
于 2012-11-01T14:35:08.607 に答える
0

ワンライナーではありませんが、あなたが望むことをする必要があります:

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

ASSERT_EQ()それ以外の場合は、@ Rookがコメントで述べているように、テストケースがクラッシュするのを防ぐために、最初のテストに使用することをお勧めします(これが設計されています)。

更新: @EvgenyとしてBoost Assignを使用すると、Panasyukの回答は、次のようになるはずです。

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

私がこれを正しく理解した場合(答えからはそれほど明確ではなく、個人的にこれを使用したことはありません)。

于 2012-11-01T14:48:53.560 に答える
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"));
}

このアサーションは、テストされた条件に違反した場合にも明確なメッセージを生成します。

于 2012-11-02T02:31:50.510 に答える