Почему 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()
это довольно просто, вы уверены, что это называется?