Google Cloud BigQuery C++ Client 2.11.0
A C++ Client Library for Google Cloud BigQuery
Loading...
Searching...
No Matches
Testing your Cloud BigQueryRead application with googlemock

This document describes how to test your own Cloud BigQueryRead application using the Cloud BigQueryRead C++ client library, Google Test and the Google Test Mocking Framework.

Mocking a Successful BigQueryReadClient::GetServiceAccount() call

First include the headers for the Cloud BigQueryRead Client, the mocking class, and the Google Mock framework:

#include "google/cloud/bigquery/storage/v1/bigquery_read_client.h"
#include "google/cloud/bigquery/storage/v1/mocks/mock_bigquery_read_connection.h"
#include <gmock/gmock.h>

The example uses a number of aliases to save typing and improve readability:

using ::google::cloud::bigquery_storage_v1_mocks::MockBigQueryReadConnection;
namespace bigquery = ::google::cloud::bigquery_storage_v1;

Create a mocking object for google::cloud::bigquery_storage_v1::BigQueryReadConnection:

auto mock = std::make_shared<MockBigQueryReadConnection>();

It is customary to first setup the expectations for your mock, and then write the rest of the code:

EXPECT_CALL(*mock, CreateReadSession)
.WillOnce([&](google::cloud::bigquery::storage::v1::
CreateReadSessionRequest const& request) {
EXPECT_EQ("test-project-name", request.parent());
EXPECT_EQ("test-table-name", request.read_session().table());
google::cloud::bigquery::storage::v1::ReadSession response;
google::cloud::bigquery::storage::v1::ReadStream stream;
stream.set_name("test-stream");
*response.add_streams() = stream;
google::cloud::bigquery::storage::v1::ReadSession>(response);
});

With the expectations in place, create a google::cloud::bigquery_storage_v1::BigQueryReadClient object:

bigquery::BigQueryReadClient bigquery_client(mock);

And then make calls on the client as usual:

google::cloud::bigquery::storage::v1::ReadSession read_session;
read_session.set_table("test-table-name");
int max_streams = 1;
auto session = bigquery_client.CreateReadSession("test-project-name",
read_session, max_streams);

And then verify the results meet your expectations:

EXPECT_TRUE(session.ok());
EXPECT_EQ("test-stream", session->streams(0).name());

Full Listing

Finally we present the full code for this example:

#include "google/cloud/bigquery/storage/v1/bigquery_read_client.h"
#include "google/cloud/bigquery/storage/v1/mocks/mock_bigquery_read_connection.h"
#include <gmock/gmock.h>
namespace {
using ::google::cloud::bigquery_storage_v1_mocks::MockBigQueryReadConnection;
namespace bigquery = ::google::cloud::bigquery_storage_v1;
TEST(MockCreateReadSessionExample, CreateReadSession) {
auto mock = std::make_shared<MockBigQueryReadConnection>();
EXPECT_CALL(*mock, CreateReadSession)
.WillOnce([&](google::cloud::bigquery::storage::v1::
CreateReadSessionRequest const& request) {
EXPECT_EQ("test-project-name", request.parent());
EXPECT_EQ("test-table-name", request.read_session().table());
google::cloud::bigquery::storage::v1::ReadSession response;
google::cloud::bigquery::storage::v1::ReadStream stream;
stream.set_name("test-stream");
*response.add_streams() = stream;
google::cloud::bigquery::storage::v1::ReadSession>(response);
});
bigquery::BigQueryReadClient bigquery_client(mock);
google::cloud::bigquery::storage::v1::ReadSession read_session;
read_session.set_table("test-table-name");
int max_streams = 1;
auto session = bigquery_client.CreateReadSession("test-project-name",
read_session, max_streams);
EXPECT_TRUE(session.ok());
EXPECT_EQ("test-stream", session->streams(0).name());
}
} // namespace