Google Cloud BigQuery C++ Client  2.2.1
A C++ Client Library for Google Cloud BigQuery
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:

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

using ::google::cloud::bigquery_mocks::MockBigQueryReadConnection;
namespace bigquery = ::google::cloud::bigquery;

Create a mocking object for google::cloud::bigquery::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::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 <gmock/gmock.h>
namespace {
using ::google::cloud::bigquery_mocks::MockBigQueryReadConnection;
namespace bigquery = ::google::cloud::bigquery;
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