我正在按照Fancordion v1.0.4 官方文档中的 MyFancordionRunner 示例来测试 BedSheet 应用程序,但未调用 suiteSetup 方法(见下文)并且服务器保持为空,导致夹具测试失败并出现 NullPointerException。
override Void suiteSetup() {
super.suiteSetup
server = BedServer(AppModule#.pod).addModule(WebTestModule#).startup
}
查看 FancordionRunner 源代码,runFixture(Obj fixtureInstance) 方法应该在第一次按照这段代码运行 Fixture 时调用 suiteSetup() ......
FixtureResult runFixture(Obj fixtureInstance) {
...
locals := Locals.instance
firstFixture := (locals.originalRunner == null)
if (firstFixture) {
locals.originalRunner = this
suiteSetup()
...
}
但由于某种原因,在我的情况下,条件 (locals.originalRunner == null) 必须返回 false,从而导致 suiteSetup() 调用被跳过。这段代码似乎使用了我不熟悉的 Fantom Actors。
我在 MyFancordionRunner 中手动调用 suiteSetup,如下所示:
override Void fixtureSetup(Obj fixtureInstance) {
if (server == null) suiteSetup
...
此变通方法解决了 NullPointerException 问题并允许固定装置成功运行,但我不知道此变通方法是否违背了 Actor 逻辑的目的,我认为这意味着只调用一次 suiteSetup。
谁能解释一下这里可能发生了什么阻止了在 runFixture(...) 中调用 suiteSetup 方法?