我正在跟踪来自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方法吗?
答案 0 :(得分:0)
如果没有看到更多代码,我不知道这里发生了什么。
Actor
使用的唯一部分是Actor.locals()
,它实际上只是一个容纳线程局部变量的底池 - 因为假设所有测试都在同一个线程中运行。
如图所示,runFixture()
中的逻辑很简单,你确定它被调用了吗?