Почему FancordionRunner suiteSetup не вызывается?

Я следую примеру MyFancordionRunner из официальной документации Fancordion v1.0.4, чтобы протестировать приложение BedSheet, но метод suiteSetup (см. Ниже) не вызывается, и сервер остается нулевым, что приводит к сбою тестов фикстуры с NullPointerException.

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

Глядя на исходный код FancordionRunner, метод runFixture(Obj fixtureInstance) должен вызывать suiteSetup() при первом запуске Fixture в соответствии с этим фрагментом кода...

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

Но по какой-то причине в моем случае условие (locals.originalRunner == null) должно возвращать false, в результате чего вызов suiteSetup() будет пропущен. Кажется, что этот фрагмент кода использует Fantom Actors, с которыми я не знаком.

Я вручную вызываю suiteSetup в MyFancordionRunner следующим образом:

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

Этот обходной путь решает проблему NullPointerException и позволяет приборам работать успешно, но я не знаю, побеждает ли этот обходной путь цель логики Actor, которая, как я предполагаю, предназначена для вызова suiteSetup только один раз.

Может кто-нибудь объяснить, что может происходить здесь, что препятствует вызову метода suiteSetup в runFixture(...), пожалуйста?

1 ответ

Я не знаю, что здесь происходит, не увидев намного больше кода.

Единственная часть Actor используется Actor.locals() который на самом деле является просто горшком для хранения локальных переменных потока - так как предполагается, что все тесты выполняются в одном потоке.

Как вы показали, логика в runFixture() это довольно просто, вы уверены, что это называется?

Другие вопросы по тегам