仅在测试模式下会发生此问题。基本上,我在正在测试的类中对Messages.get()进行了一些调用

Messages.get("api.parser.missing.id")

存在于
public long getParserId() throws UnknownParserIdException {
        if (parserEntity == null || parserEntity.parserId == 0) {
            throw new UnknownParserIdException(Messages.get("api.parser.missing.id"));
        }
        return parserEntity.parserId;
    }

在我的测试中,我有以下内容
@Test
public void testSaveAndGetParserId() {

    try {
        addParserService.attachAppId(appId);
        addParserService.attachParserJson(jsonToAttach);
        addParserService.transformAttachedJson();
        addParserService.saveParserEntity();
        Long parserId = addParserService.getParserId();
        boolean isPositive = parserId > 0;
        assertTrue(isPositive);
        ParserRepository parserRepository = new ParserRepository();
        parserRepository.deleteParserById(parserId);
    }
    catch (MalformedParserException | UnknownAppIdException | UnknownParserIdException e) {

        assertTrue(false);
    }
}

现在,每当运行此测试时,我都会得到以下NPE
[error] Test services.AddParserServiceTest.testTransformNoJsonAttached failed: java.lang.NullPointerException: null, took 0.09 sec
[error]     at play.api.i18n.DefaultMessagesApi.preferred(Messages.scala:482)
[error]     at play.api.i18n.DefaultMessagesApi.preferred(Messages.scala:488)
[error]     at play.i18n.MessagesApi.preferred(MessagesApi.java:128)
[error]     at play.mvc.Http$Context.messages(Http.java:173)
[error]     at play.mvc.Http$Context.lang(Http.java:165)
[error]     at play.i18n.Messages.getLang(Messages.java:29)
[error]     at play.i18n.Messages.get(Messages.java:109)
[error]     at services.impl.AddParserService.transformAttachedJson(AddParserService.java:31)
[error]     at services.AddParserServiceTest.testTransformNoJsonAttached(AddParserServiceTest.java:57)

我还有不属于我的服务包的其他类和测试,它们使用il8n类就很好。

我检查过的事情
  • 被调用的消息确实存在于消息
  • 消息文件列在application.conf中(该文件包含在application.test.conf中)
  • 在我的服务类中删除对Messages.get()的调用可以修复NPE,但我显然不想这样做。
  • 最佳答案

    如果仅在测试应用程序时发生,则可能是由于无法在测试文件夹中访问资源文件。确保要测试的文件位于测试文件夹中。

    相关文章:play2 does not resolve messages when run from a unit test

    08-18 16:58
    查看更多