1

I am following MyFancordionRunner example from Fancordion v1.0.4 official documentation to test a BedSheet application, but the suiteSetup method (see below) is not being called and the server remains null, causing the fixture tests to fail with a NullPointerException.

override Void suiteSetup() {
    super.suiteSetup
    server = BedServer(AppModule#.pod).addModule(WebTestModule#).startup
}

Looking at FancordionRunner source code, the runFixture(Obj fixtureInstance) method should be invoking suiteSetup() the first time a Fixture is run as per this piece of code...

FixtureResult runFixture(Obj fixtureInstance) {
    ...
    locals := Locals.instance
    firstFixture := (locals.originalRunner == null) 
    if (firstFixture) {
        locals.originalRunner = this
        suiteSetup()
        ...
}

But for some reason in my case the condition (locals.originalRunner == null) must be returning false, causing the suiteSetup() invocation to be skipped. It seems that this piece of code uses Fantom Actors which I'm not familiar with.

I am manually invoking the suiteSetup within MyFancordionRunner like this:

override Void fixtureSetup(Obj fixtureInstance) {
    if (server == null) suiteSetup         
    ...

This workaround solves the NullPointerException issue and allows the fixtures to run successfully but I don't know if this workaround is defeating the purpose of the Actor logic, which I presume is meant to invoke suiteSetup only once.

Can anyone explain what could be going on here that is preventing the suiteSetup method from being called within runFixture(...), please?

Steve Eynon
  • 4,979
  • 2
  • 30
  • 48
LightDye
  • 1,234
  • 11
  • 15

1 Answers1

0

I don't know what's going on here without seeing a lot more code.

The only part of Actor being used is Actor.locals() which is really just a pot to hold thread local variables - as it is assumed that all tests are run in the same thread.

As you shown, the logic in runFixture() is pretty simple, are you sure it is being called?

Steve Eynon
  • 4,979
  • 2
  • 30
  • 48