Leveling Up Your Project Testing with tSQLt Unit Tests for SQL Queries

Written by Cheng Yang

I am writing this blog post to share a cool unit testing tool that I learned about at the VS Live conference in Vegas. While many developers build tests for their code to make sure it is functioning as intended, fewer developers test their database queries. Testing your code and your database queries are equally vital to make sure your queries are working as intended and producing the expected results. In this blog article, I’ll demonstrate how to use tSQLt, a unit testing framework for SQL Server, to create tests for your SQL Server database queries.

Step 1: Install tSQLt

Go to the official website tSQLt to download and set up tSQLt. Once the installation zip file has been downloaded, unzip it to a spot on your hard drive, and then run the PrepareServer.sql file.

Next, Run the tSQLt.class.sql script to install the tSQLt framework in your SQL Server database.

Step 2: Create a test database

For your unit tests, you will need to set up a test database. Only the objects and information required for testing will be in this database, which will be distinct from your production database. Run the following query in SQL Server Management Studio to create the test database.

CREATE DATABASE [tSQLtTestDB];
GO

Step 3: Create a test schema

Once you’ve created your test database, you will need to create a schema specifically for your tests.

USE [tSQLtTestDB];
GO

CREATE SCHEMA [Tests];
GO

Step 4: Write your first test

We will need to create a test class first, According to tSQLt “tSQLt.NewTestClass creates a new test class. A test class is simply a schema where the user can create a test case procedure and any other related objects.”

EXEC tSQLt.NewTestClass 'TestDatabaseQueries';
GO

In this example database query, we will create a temporary table #Fruit and inserting two rows of data - one for apples and one for oranges. The test case from below verifies if the number of apples and oranges in the table matches the expected values.

USE [tSQLtTestDB];
GO

CREATE PROCEDURE TestDatabaseQueries.[test if fruit returns expected result]
AS
BEGIN
    CREATE TABLE #Fruit (FruitName VARCHAR(50), Quantity INT)
    INSERT INTO #Fruit VALUES ('Apple', 10), ('Orange', 5)

    DECLARE @AppleCount INT
    DECLARE @OrangeCount INT
    SELECT @AppleCount = SUM(Quantity) FROM #Fruit WHERE FruitName = 'Apple'
    SELECT @OrangeCount = SUM(Quantity) FROM #Fruit WHERE FruitName = 'Orange'

    -- this case will return false
    EXEC tSQLt.AssertEquals @expected = 22, @actual = @AppleCount
    -- this case will return true
    EXEC tSQLt.AssertEquals @expected = 5, @actual = @OrangeCount

    DROP TABLE #Fruit
END
GO

In this test, we’re using the tSQLt.AssertEquals procedure to check that if the query returns the expected number of AppleCount or OrangeCount.

Step 5: Run your tests

Once you’ve written your test, you can run it using the tSQLt.Run procedure. You can run all of your tests at once by running the following command:

EXEC tSQLt.RunAll;

Or, you can run an individual test by specifying the test name:

EXEC tSQLt.Run 'TestDatabaseQueries.[test if fruit returns expected result]';

Here is the result:

Finally, testing your database queries is crucial, just like testing your code. You can be sure that your SQL Server database queries are functioning as expected and delivering accurate results by creating and running tests for them using tSQLt.

Published March 27, 2023 by

undefined avatar
Cheng Yang Software Developer

Suggested Reading