Skip to content

Setup Guide

Aryeh Citron edited this page Apr 27, 2026 · 1 revision

Setup Guide

Direct Instantiation

The simplest approach — create an in-memory BigQuery instance directly:

using var bq = InMemoryBigQuery.Create("test-project", "my_dataset", ds =>
{
    ds.AddTable("users", schema);
});

var client = bq.Client;

Builder Pattern

For multi-dataset setups:

using var bq = InMemoryBigQuery.Builder()
    .WithProjectId("test-project")
    .AddDataset("dataset1", ds =>
    {
        ds.AddTable("users", usersSchema);
        ds.AddTable("orders", ordersSchema);
    })
    .AddDataset("dataset2", ds =>
    {
        ds.AddTable("events", eventsSchema);
    })
    .Build();

DI Integration

Replace BigQueryClient in your service collection:

services.UseInMemoryBigQuery(options =>
{
    options.ProjectId = "test-project";
    options.AddDataset("my_dataset", ds =>
    {
        ds.AddTable("users", schema);
    });
    options.OnClientCreated = result =>
    {
        // Seed data, configure fault injection, etc.
    };
});

The extension method:

  1. Discovers existing BigQueryClient registrations
  2. Preserves the original service lifetime (singleton, scoped, or transient)
  3. Replaces with an in-memory backed client

Configuration Options

Option Type Description
ProjectId string GCP project ID for the emulated instance (default: "test-project")
AddDataset() method Pre-create datasets and tables
OnClientCreated Action<InMemoryBigQueryResult> Callback after client creation

Fault Injection

using var bq = InMemoryBigQuery.Create("test-project");

// Simulate 503 Service Unavailable
bq.SetFaultInjector(request =>
    new HttpResponseMessage(HttpStatusCode.ServiceUnavailable));

// Clear fault injection
bq.SetFaultInjector(null);

Request & Query Logging

using var bq = InMemoryBigQuery.Create("test-project");

// ... perform operations ...

// Check what requests were made
foreach (var entry in bq.Handler.RequestLog)
    Console.WriteLine(entry);

// Check what SQL queries were executed
foreach (var query in bq.Handler.QueryLog)
    Console.WriteLine(query);

Clone this wiki locally