jeudi 25 août 2016

Akka.net Testkit does not mark test case failed despite ActorInitializationException exception

Following is the actor, I've defined (trying to get my head around persistent actor!!)

public class Country : ReceivePersistentActor
{
    public override string PersistenceId => GetType().Name + state.Id;

    private CountryState state;

    public Country()
    {
        Command<CreateCountry>(CreateCountry);
    }

    private bool CreateCountry(CreateCountry cmd)
    {
        Persist(new CountryCeated
        {
            Id = cmd.Id,
            Code = cmd.Code,
            Description = cmd.Description,
            Active = cmd.Active
        }, evt =>
        {
            state = new CountryState
            {
                Id = evt.Id,
                Code = evt.Code,
                Description = evt.Description,
                Active = evt.Active
            };
        });

        return true;
    }
}

Following is unit test case that I've defined:

[TestClass]
public class CountrySpec : TestKit
{
    [TestMethod]
    public void CountryActor_Should_Create_A_Country()
    {
        var country = Sys.ActorOf(Props.Create(() => new Country()), "Country");
        country.Tell(new CreateCountry(Guid.NewGuid(), "UK", "United Kingdom", true));
        ExpectNoMsg();
    }
}

When I run the test case, there is an exception that I can see in the output window of the test case

[ERROR][25/08/2016 08:25:07][Thread 0007][akka://test/user/Country] Object reference not set to an instance of an object.
Cause: [akka://test/user/Country#552449332]: Akka.Actor.ActorInitializationException: Exception during creation ---> System.NullReferenceException: Object reference not set to an instance of an object.
   at Domain.Country.get_PersistenceId() in Y:\Spikes\StatefulActors\Domain\Country.cs:line 9
   at Akka.Persistence.Eventsourced.StartRecovery(Recovery recovery)
   at Akka.Persistence.Eventsourced.AroundPreStart()
   at Akka.Actor.ActorCell.<>c__DisplayClass154_0.<Create>b__0()
   at Akka.Actor.ActorCell.UseThreadContext(Action action)
   at Akka.Actor.ActorCell.Create(Exception failure)
   --- End of inner exception stack trace ---
   at Akka.Actor.ActorCell.Create(Exception failure)
   at Akka.Actor.ActorCell.SysMsgInvokeAll(EarliestFirstSystemMessageList messages, Int32 currentState)

but the test case is marked as success enter image description here

Is there any way/settings in the TestKit, where it can be set such that for any exception, mark the test case failed?

Aucun commentaire:

Enregistrer un commentaire