mssql-testing
Part of the rust-mssql-driver project.
Test infrastructure for SQL Server driver development.
Overview
This crate provides utilities for integration testing against SQL Server instances, including testcontainers support for spinning up real SQL Server instances and a mock TDS server for unit tests that don't require Docker.
Features
- SQL Server containers - Managed test containers via testcontainers
- Mock TDS server - Simulate SQL Server responses without Docker
- Packet recording - Capture and replay TDS traffic for regression tests
- Test fixtures - Common test data and helpers
- Connection helpers - Simplified test connection setup
Mock Server
The mock server simulates TDS protocol responses for unit testing:
use ;
async
SQL Server Containers
Spin up real SQL Server instances for integration tests:
use SqlServerContainer;
use Cli;
async
Container Versions
// SQL Server 2019
let container = sql_server_2019;
// SQL Server 2022
let container = sql_server_2022;
// Custom image
let container = new;
Packet Recording
Record and replay TDS packets for regression testing:
use ;
// Record packets during a test run
let recorder = new;
// ... run operations ...
let packets: = recorder.packets;
// Save for later replay
let json = to_string?;
// Replay recorded packets
let server = builder
.with_recorded_packets
.build
.await?;
Test Fixtures
Common test data and helpers:
use ;
// Get a test connection string (from env or default)
let conn_str = test_connection_string;
// Set up a test database with schema
test_database_setup.await?;
Modules
| Module | Description |
|---|---|
container |
SQL Server testcontainers support |
mock_server |
Mock TDS server implementation |
fixtures |
Test data and setup helpers |
Key Types
| Type | Description |
|---|---|
SqlServerContainer |
Testcontainers SQL Server image |
MockTdsServer |
Mock TDS protocol server |
MockServerBuilder |
Builder for configuring mock server |
MockResponse |
Pre-configured response for a query |
MockColumn |
Column metadata for mock responses |
ScalarValue |
Typed scalar values for mock data |
PacketRecorder |
Records TDS packets for replay |
RecordedPacket |
Captured TDS packet data |
Mock Response Types
// Empty result (no rows)
empty
// Single scalar value
scalar
// Rows with columns
rows
// Error response
error
// Affected row count (for INSERT/UPDATE/DELETE)
affected_rows
Best Practices
- Use mock server for unit tests - Fast, no Docker dependency
- Use containers for integration tests - Real SQL Server behavior
- Record packets for regression tests - Catch protocol changes
- Clean up test databases - Use fixtures for consistent state
License
MIT OR Apache-2.0