Akka.NET FSM - Testing OnTermination transition

Viewed 46

Let's say I would like to test OnTermination logic in my FSM. What would be the proper way to do that? Em I doing it right in my second test? Why is my first test failing, even though entering OnTermination code and sending message to the parent actor.

public class FsmTests : TestKit
{
    [Fact]
    public void NotWorkingTest()
    {
        var fsmActorRef = ActorOfAsTestActorRef<FsmActor>(Props.Create(() => new FsmActor()), TestActor);
        fsmActorRef.Tell(new ExampleEvent());

        ExpectMsg("termination");
    }

    [Fact]
    public void WorkingTest()
    {
        var fsmActorRef = ActorOfAsTestActorRef<FsmActor>(Props.Create(() => new FsmActor()), TestActor);
        fsmActorRef.Tell(PoisonPill.Instance);

        ExpectMsg("termination");
    }
}

public enum State
{
    Idle,
    Active
}
public interface IData { }
public class Uninitialized : IData
{
    public static Uninitialized Instance = new Uninitialized();
    private Uninitialized() { }
}

public class ExampleEvent { }

public class FsmActor : FSM<State, IData>
{
    public FsmActor()
    {
        StartWith(State.Idle, Uninitialized.Instance);

        When(State.Idle, state =>
        {
            if (state.FsmEvent is ExampleEvent ex && state.StateData is Uninitialized)
            {
                return GoTo(State.Done);
            }

            return null;
        });

        Initialize();

        OnTermination(termination =>
        {
            Context.Parent.Tell("termination");
        });
    }
}
0 Answers
Related