1

我正在按照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 方法?

4

1 回答 1

0

如果没有看到更多代码,我不知道这里发生了什么。

唯一Actor被使用的部分是Actor.locals()它实际上只是一个保存线程局部变量的罐子——因为假设所有测试都在同一个线程中运行。

如您所示,其中的逻辑runFixture()非常简单,您确定它被调用了吗?

于 2015-12-13T16:35:49.897 回答