Skip to content

IntroductionGo to Introduction section

For an introduction into what the Akka Testing Helpers project is, please see the solution's new readme on GitHub(opens in a new window).

Upgrading To V2Go to Upgrading To V2 section

I have removed the versions of this package from NuGet that were versioned by date (for example 2018.3.6.2) and uploaded a new package with the version 2.0.0. This is to honour semantic versioning going forward.

Breaking ChangesGo to Breaking Changes section

There are 2 tiny breaking changes between version 2018.3.6.2 and version 2.0.0. A quick find and replace should be all that is needed. Now proper versioning is in place upgrades should be smoother in the future.

RegisterHandlerGo to RegisterHandler section

The RegisterHandler method on the settings class is now called RegisterChildHandler.

// Old:
UnitTestFrameworkSettings.Empty.RegisterHandler<ExampleActor, int>(i => i * 2));

// New:
UnitTestFrameworkSettings.Empty.RegisterChildHandler<ExampleActor, int>(i => i * 2));

SupervisorGo to Supervisor section

The Supervisor property has been renamed to Parent.

// Old:
framework.Supervisor.Expect("hello world");

// New:
framework.Parent.Expect("hello world");

New FeaturesGo to New Features section

There are 3 new features in version 2.0.0.

Parent HandlersGo to Parent Handlers section

You can now add handlers to the parent test probe:

UnitTestFramework<SutActor> framework = UnitTestFrameworkSettings
    .Empty
    .RegisterParentHandler<Save>(s => new ModifiedSave(s.Value.ToUpper()))
    .CreateFramework<SutActor>(this);

The example above creates an instance of SutActor with a parent TestProbe that receives Save messages and replies with ModifiedSave messages.

Unhandled ExceptionsGo to Unhandled Exceptions section

You can now send a message into the SUT actor and wait for an exception to be thrown. There is also a new property on the UnitTestFramework that allows you to access unhandled exceptions.

//arrange
Exception message = new ArithmeticException();
UnitTestFramework<SutActor> framework = UnitTestFrameworkSettings
    .Empty
    .CreateFramework<SutActor>(this);

//act
framework.TellMessageAndWaitForException(message);

//assert
framework.UnhandledExceptions.First().Should().BeSameAs(message);

The example above creates an instance of SutActor, then sends it a message. In this example the message is an exception and the StuActor throws any exceptions it receives. The TellMessageAndWaitForException method blocks the thread until the exception is thrown. The UnhandledExceptions property is then used to assert the correct exception is thrown.

This feature keeps inline with the framework's philosophy of removing hard-coded wait times.

DelayGo to Delay section

You can now block the current thread by a certain period of time. The main benefit of this feature is that it works like the rest of the Akka TestKit by multiplying the given duration by the configured timefactor.

UnitTestFramework<SutActor> framework = UnitTestFrameworkSettings
    .Empty
    .CreateFramework<SutActor>(this);

// Sync
framework.Delay(TimeSpan.FromSeconds(1));

// Async
await framework.DelayAsync(TimeSpan.FromSeconds(1));

The above example blocks the thread by 3 seconds if the given TestKit instance has a timefactor of 3. Using this method allows you to modify all of your currently hard-coded delays by the timefactor.