AzureFunctions.TestFramework.ServiceBus 0.11.2

dotnet add package AzureFunctions.TestFramework.ServiceBus --version 0.11.2
                    
NuGet\Install-Package AzureFunctions.TestFramework.ServiceBus -Version 0.11.2
                    
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="AzureFunctions.TestFramework.ServiceBus" Version="0.11.2" />
                    
For projects that support PackageReference, copy this XML node into the project file to reference the package.
<PackageVersion Include="AzureFunctions.TestFramework.ServiceBus" Version="0.11.2" />
                    
Directory.Packages.props
<PackageReference Include="AzureFunctions.TestFramework.ServiceBus" />
                    
Project file
For projects that support Central Package Management (CPM), copy this XML node into the solution Directory.Packages.props file to version the package.
paket add AzureFunctions.TestFramework.ServiceBus --version 0.11.2
                    
#r "nuget: AzureFunctions.TestFramework.ServiceBus, 0.11.2"
                    
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
#:package AzureFunctions.TestFramework.ServiceBus@0.11.2
                    
#:package directive can be used in C# file-based apps starting in .NET 10 preview 4. Copy this into a .cs file before any lines of code to reference the package.
#addin nuget:?package=AzureFunctions.TestFramework.ServiceBus&version=0.11.2
                    
Install as a Cake Addin
#tool nuget:?package=AzureFunctions.TestFramework.ServiceBus&version=0.11.2
                    
Install as a Cake Tool

AzureFunctions.TestFramework.ServiceBus

NuGet

ServiceBusTrigger invocation support for the Azure Functions Test Framework. Provides InvokeServiceBusAsync(...), InvokeServiceBusBatchAsync(...), and ConfigureFakeServiceBusMessageActions() — extensions on IFunctionsTestHost that let you trigger Service Bus-triggered functions directly from integration tests without a real Azure Service Bus namespace.

Usage

using Azure.Messaging.ServiceBus;
using AzureFunctions.TestFramework.Core;
using AzureFunctions.TestFramework.ServiceBus;

public class ServiceBusFunctionTests : IAsyncLifetime
{
    private IFunctionsTestHost _testHost;

    public async Task InitializeAsync()
    {
        _testHost = await new FunctionsTestHostBuilder()
            .WithFunctionsAssembly(typeof(MyServiceBusFunction).Assembly)
            .ConfigureFakeServiceBusMessageActions()   // required when functions accept ServiceBusMessageActions
            .BuildAndStartAsync();
    }

    // ── Single message (string / byte[] / BinaryData function parameter) ──────────────

    [Fact]
    public async Task ProcessMessage_WithStringBody_Succeeds()
    {
        var message = new ServiceBusMessage("Hello from test!");
        var result = await _testHost.InvokeServiceBusAsync("ProcessOrderMessage", message);
        Assert.True(result.Success);
    }

    // ── Single message (ServiceBusReceivedMessage function parameter) ─────────────────

    [Fact]
    public async Task ProcessMessage_WithReceivedMessage_Succeeds()
    {
        var message = ServiceBusModelFactory.ServiceBusReceivedMessage(
            body: BinaryData.FromString("Hello from test!"),
            messageId: Guid.NewGuid().ToString());

        var result = await _testHost.InvokeServiceBusAsync("ProcessOrderMessage", message);
        Assert.True(result.Success);
    }

    // ── Batch mode (IsBatched = true, ServiceBusReceivedMessage[] parameter) ──────────

    [Fact]
    public async Task ProcessBatch_WithMultipleMessages_Succeeds()
    {
        var messages = Enumerable.Range(1, 3)
            .Select(i => ServiceBusModelFactory.ServiceBusReceivedMessage(
                body: BinaryData.FromString($"order {i}"),
                messageId: Guid.NewGuid().ToString()))
            .ToList()
            .AsReadOnly();

        var result = await _testHost.InvokeServiceBusBatchAsync("ProcessOrderBatch", messages);
        Assert.True(result.Success);
    }

    // ── ServiceBusMessageActions injection ────────────────────────────────────────────

    [Fact]
    public async Task ProcessMessage_CompletesMessageViaActions()
    {
        var message = ServiceBusModelFactory.ServiceBusReceivedMessage(
            body: BinaryData.FromString("Hello!"),
            messageId: Guid.NewGuid().ToString());

        var result = await _testHost.InvokeServiceBusAsync("ProcessOrderMessage", message);
        Assert.True(result.Success);

        // Verify that the function called CompleteMessageAsync
        var actions = _testHost.Services.GetRequiredService<FakeServiceBusMessageActions>();
        Assert.Single(actions.RecordedActions);
        Assert.Equal("Complete", actions.RecordedActions[0].Action);
    }

    public async Task DisposeAsync()
    {
        await _testHost.StopAsync();
        _testHost.Dispose();
    }
}

ServiceBusMessageActions and ServiceBusSessionMessageActions

Functions that accept ServiceBusMessageActions or ServiceBusSessionMessageActions as parameters need fake implementations because the real SDK converters require a live gRPC settlement channel. Call ConfigureFakeServiceBusMessageActions() on the builder to register the fakes:

_testHost = await new FunctionsTestHostBuilder()
    .WithFunctionsAssembly(typeof(MyFunction).Assembly)
    .ConfigureFakeServiceBusMessageActions()  // registers fakes + intercepts SDK converters
    .BuildAndStartAsync();

After the invocation, resolve the fake from host.Services to assert settlement calls:

var actions = host.Services.GetRequiredService<FakeServiceBusMessageActions>();
// RecordedActions contains every Complete/Abandon/DeadLetter/Defer/RenewLock call made during the invocation
Assert.Equal("Complete", actions.RecordedActions[0].Action);

// Reset between tests if the host is shared (IClassFixture / OneTimeSetUp)
actions.Reset();

For session-enabled topics/queues:

var sessionActions = host.Services.GetRequiredService<FakeServiceBusSessionMessageActions>();
Assert.Contains(sessionActions.RecordedActions, a => a.Action == "RenewSessionLock");

References

License

MIT

Product Compatible and additional computed target framework versions.
.NET net8.0 is compatible.  net8.0-android was computed.  net8.0-browser was computed.  net8.0-ios was computed.  net8.0-maccatalyst was computed.  net8.0-macos was computed.  net8.0-tvos was computed.  net8.0-windows was computed.  net9.0 was computed.  net9.0-android was computed.  net9.0-browser was computed.  net9.0-ios was computed.  net9.0-maccatalyst was computed.  net9.0-macos was computed.  net9.0-tvos was computed.  net9.0-windows was computed.  net10.0 is compatible.  net10.0-android was computed.  net10.0-browser was computed.  net10.0-ios was computed.  net10.0-maccatalyst was computed.  net10.0-macos was computed.  net10.0-tvos was computed.  net10.0-windows was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last Updated
0.11.2 81 4/14/2026
0.11.1 88 4/13/2026
0.11.0 86 4/13/2026
0.10.0 89 4/11/2026
0.9.0 92 4/8/2026
0.8.0 87 4/7/2026
0.7.1 88 4/7/2026
0.7.0 89 4/7/2026
0.6.0 81 4/7/2026
0.5.0 89 4/2/2026
0.4.1 93 4/1/2026
0.4.0 85 4/1/2026
0.3.0 87 4/1/2026
0.2.1 90 3/17/2026
0.2.0 85 3/17/2026