Hi, I am trying to find the best way to isolate msg expectations when 
testing. I started having issues with messages for one test are making an 
other test (in the same scala-test class) fail, especially since I started 
using akka cluster and broadcasting via DistributedPubSubExtension.

I always create new instances of my actors. But since they use the same 
system (via TestKit) I get this problem where the first test succeeds bit 
subsequent tests fail because of (currently) SubscribeAck message.

One way ofcourse would be to reset the actor system for each test, but it 
doesn't seem to be supported by TestKit.

This is my base test class:

class BaseActorSuite(config: Config = ConfigFactory.empty) extends 
TestKit(ActorSystem("testSystem", config)) with ImplicitSender with 
FunSuiteLike with Matchers with BeforeAndAfterAll
{
    override def afterAll {
        TestKit.shutdownActorSystem(system)
    }
}

And this is how I do testing:

class ClusterKeeperActorTest extends 
BaseActorSuite(ConfigFactory.load("org/distributedrange/cluster/actors/ClusterKeeperActorTest.conf"))
 
with MockitoSugar
{
    // simulate a remote cluster keeper
    def remoteClusterKeeperActor = {
        val remote = TestProbe()
        val mediator = DistributedPubSubExtension(system).mediator
        mediator ! Subscribe(ClusterKeeperActor.Subscriptions.Index, 
remote.ref)
        remote
    }

    def newActor = system.actorOf(Props(new ClusterKeeperActor))

    test("sends SyncIndex to remote cluster keepers") {
        val clusterKeeper = newActor
        val remoteClusterKeeper = remoteClusterKeeperActor
        val rangeRef = RangeRef("id", IntKey.min, IntKey.max, testActor)
        clusterKeeper ! SyncIndex(rangeRef)
        remoteClusterKeeper.expectMsg(RemoteSyncIndex(rangeRef))
    }

    test("keeps track of new members") {
        val clusterKeeper = newActor
        val m1 = mockMember
        val m2 = mockMember

        clusterKeeper ! MemberUp(m1)
        clusterKeeper ! MemberUp(m2)
        clusterKeeper ! messages.AllMembers
        expectMsg(Set(m1, m2))
    }
}

"keeps track of new members" runs fine if I comment out the 1st test, but 
fails otherwise with 

java.lang.AssertionError: assertion failed: expected Set(Mock for Member, 
hashCode: 405006382, Mock for Member, hashCode: 1566584931), found 
*SubscribeAck*
(Subscribe(index,None,Actor[akka://testSystem/system/testActor2#640267634]))

As you can see, the SubscribeAck comes from the 1st test.

Ideas? Is there a way say to reset the mailboxes in-between tests?

Thanks


-- 
>>>>>>>>>>      Read the docs: http://akka.io/docs/
>>>>>>>>>>      Check the FAQ: 
>>>>>>>>>> http://doc.akka.io/docs/akka/current/additional/faq.html
>>>>>>>>>>      Search the archives: https://groups.google.com/group/akka-user
--- 
You received this message because you are subscribed to the Google Groups "Akka 
User List" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/akka-user.
For more options, visit https://groups.google.com/d/optout.

Reply via email to