在play 2.3.2单元测试中使用Helpers.fakeApplcation时获取“java.lang.StackOverflowError:null”

时间:2014-08-15 23:18:56

标签: java unit-testing playframework-2.0

我想在play 2.3框架中使用fakeApplication尝试Java单元测试。我的代码是这样的:

import static org.fest.assertions.Assertions.assertThat;
import static play.test.Helpers.fakeApplication;
import static play.test.Helpers.running;
import org.junit.Test;
import play.test.WithApplication;

public class ApplicationTest extends WithApplication {

    @Test
    public void simpleCheck() {
        running(fakeApplication(), new Runnable() {
            public void run() {
                int a = 1 + 1;
                assertThat(a).isEqualTo(2);
            }
        });
    }
}

但是我收到以下错误:

[error] Test ApplicationTest.simpleCheck failed: java.lang.StackOverflowError: null, took 3.862 sec
[error]     at java.lang.String.regionMatches(String.java:1326)
[error]     at java.lang.String.equalsIgnoreCase(String.java:1090)
[error]     at org.slf4j.impl.JDK14LoggerFactory.getLogger(JDK14LoggerFactory.java:55)
[error]     at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:270)
[error]     at org.slf4j.bridge.SLF4JBridgeHandler.getSLF4JLogger(SLF4JBridgeHandler.java:204)
[error]     at org.slf4j.bridge.SLF4JBridgeHandler.publish(SLF4JBridgeHandler.java:291)
[error]     at java.util.logging.Logger.log(Logger.java:610)
[error]     at org.slf4j.impl.JDK14LoggerAdapter.log(JDK14LoggerAdapter.java:579)
.
.
.
[error] Failed: Total 1, Failed 1, Errors 0, Passed 0
[error] Failed tests:
[error]         ApplicationTest
[error] (test:testOnly) sbt.TestsFailedException: Tests unsuccessful

当我不使用fakeApplication时,测试通过。

1 个答案:

答案 0 :(得分:0)

documentation中所述,WithApplication “会自动确保为您启动和停止虚假应用程序”

因此,如果扩展WithApplication,则无需在测试中开始新的测试。 试试这个:

public class ApplicationTest extends WithApplication {
    @Test
    public void simpleCheck() {
        int a = 1 + 1;
        assertThat(a).isEqualTo(2);
    }
}

或者

public class ApplicationTest {
    @Test
    public void simpleCheck() {
        running(fakeApplication(), new Runnable() {
            public void run() {
                int a = 1 + 1;
                assertThat(a).isEqualTo(2);
            }
        });
    }
}