1

我正在为 Web 应用程序编写单元测试并使用 Java Play!(2.1.3) 框架的 FakeApplication 类。

public class TagTest {
    public static FakeApplication app;    
...
    // BeforeClass only runs once before any tests are run
    @BeforeClass
    public static void setUpBeforeClass() {
        // Set up new FakeApplication before running any tests
        app = Helpers.fakeApplication(Helpers.inMemoryDatabase());
        Helpers.start(app);
    }
...
}

我在所有四个测试类中都有相同的 setUpBeforeClass() 方法来测试我的四个不同模型中的每一个,但是当我运行play test命令时,所有四个测试类都返回类似的错误:

[error] Test models.TagTest failed: java.lang.NullPointerException: null
[error]     at Global.onStart(Global.java:59)
[error]     at play.core.j.JavaGlobalSettingsAdapter.onStart(JavaGlobalSettingsAdapter.scala:17)
[error]     at play.api.GlobalPlugin.onStart(GlobalSettings.scala:175)
[error]     at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:68)
[error]     at play.api.Play$$anonfun$start$1$$anonfun$apply$mcV$sp$1.apply(Play.scala:68)
[error]     at scala.collection.immutable.List.foreach(List.scala:309)
[error]     at play.api.Play$$anonfun$start$1.apply$mcV$sp(Play.scala:68)
[error]     at play.api.Play$$anonfun$start$1.apply(Play.scala:68)
[error]     at play.api.Play$$anonfun$start$1.apply(Play.scala:68)
[error]     at play.utils.Threads$.withContextClassLoader(Threads.scala:18)
[error]     at play.api.Play$.start(Play.scala:67)
[error]     at play.api.Play.start(Play.scala)
[error]     at play.test.Helpers.start(Helpers.java:354)
[error]     at models.TagTest.setUpBeforeClass(TagTest.java:35)

其中第 35 行是该行:

Helpers.start(app);

我在这里做错了吗?

4

1 回答 1

2

从堆栈中看,NPE 是在您自己的类的第 59 行Global抛出的- 在您的覆盖范围内GlobalSettings.onStart()

在那里查看/调试以查看问题所在。很难在没有看到您的代码的情况下提出更多建议 - 也许可以查看此以了解基本介绍Global以及如何使用它。

顺便说一句 - 只是几个额外的点

  • 为什么是app静态变量?它应该是一个实例变量TagTest
  • 您不必指出第 35 行的代码是什么TagTest——这可以在堆栈跟踪的倒数第二行中看到。跟踪的第一行显示了实际抛出异常的方法 - 其余的只是显示导致该方法调用的调用堆栈。
于 2013-08-27T00:20:40.640 回答