为什么没有调用FancordionRunner suiteSetup?

时间:2015-12-08 22:28:43

标签: fantom afbedsheet fancordion

我正在跟踪来自Fancordion v1.0.4 official documentation的MyFancordionRunner示例来测试BedSheet应用程序,但是没有调用suiteSetup方法(见下文),并且服务器保持为null,导致fixture测试因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方法吗?

1 个答案:

答案 0 :(得分:0)

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

Actor使用的唯一部分是Actor.locals(),它实际上只是一个容纳线程局部变量的底池 - 因为假设所有测试都在同一个线程中运行。

如图所示,runFixture()中的逻辑很简单,你确定它被调用了吗?