Found a feature in SQL Test GUI that prevented the use of msdb.dbo.sp_send_dbmail. The SQL Test GUI would queue and e-mail and rollback the queued email. The workaround is to add this code to the test driver:
1) IF @@TRANCOUNT > 0 ROLLBACK
2) BEGIN TRANSACTION
For example:
USE DBNAME
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- Comments here are associated with the test.
-- For test case examples, see: http://tsqlt.org/user-guide/tsqlt-tutorial/
ALTER PROCEDURE [test_class].[test send email]
AS
BEGIN
IF @@TRANCOUNT > 0 ROLLBACK -- Red-Gate TRANSACTION workaround
--Assemble
-- This section is for code that sets up the environment. It often
-- contains calls to methods such as tSQLt.FakeTable and tSQLt.SpyProcedure
-- along with INSERTs of relevant data.
-- For more information, see http://tsqlt.org/user-guide/isolating-dependencies/
--Act
-- Execute the code under test like a stored procedure, function or view
-- and capture the results in variables or tables.
-- Send email
EXEC msdb.dbo.sp_send_dbmail @profile_name = 'MAILPROFILE',
@recipients = 'productmanager@red-gate.com',
@body = 'Dear product manager, please make transaction wrapping optional/configurable per test',
@subject = 'SQL Test Feature request',
@from_address = 'noreply@red-gate.com'
--Assert
-- Compare the expected and actual values, or call tSQLt.Fail in an IF statement.
-- Available Asserts: tSQLt.AssertEquals, tSQLt.AssertEqualsString, tSQLt.AssertEqualsTable
-- For a complete list, see: http://tsqlt.org/user-guide/assertions/
BEGIN TRANSACTION -- Red-Gate TRANSACTION workaround
END;
For example: