使用intellij在libgdx中运行测试

时间:2015-01-11 12:15:03

标签: android intellij-idea libgdx

我的团队和我自己正在使用libgdx创建一个应用程序,我们将一些数据保存在json文件中。没什么特别的。该文件保存在“android / assets / data / cards.json”中,因此Gdx.files.internal命令可以在android(自然)和运行桌面版本(更改工作目录后)中轻松找到它。 问题是,当在intellij中运行测试时,工作目录更改不适用,因此无法找到它。我试图将所述文件的副本复制到核心项目中。所以我有两种阅读文件的方法:

public static final String cardsJsonFilePath = "data/cards.json"; /**** at a later method ****/ byte[] encoded = (Gdx.files.internal(cardsJsonFilePath)).readBytes(); byte[] encoded = Files.readAllBytes(Paths.get(cardsJsonFilePath));

第一个赋值在每个配置中都有效,除了测试(从GDX.files.internal接收null),第二个赋值只要我保留核心目录中的数据文件夹的副本,而不是在android上(因为android中不存在文件和路径)。 此外,后者是一个相当差的解决方案,因为它迫使我保留文件的更新副本以供测试。

TL; DR 我有一个资产,我希望我的测试访问intellij,我希望它与libgdx.files.internal或其他一些Android友好的解决方案一起使用。

提前感谢!

1 个答案:

答案 0 :(得分:0)

所以,我找到了自己问题的答案,所以如果你有类似的问题,我希望这会有所帮助。 当我怀疑空指针异常是由于找不到文件时,我错了。 异常的原因是,当未在适当的应用程序上下文中运行时,Gdx类未正确初始化(例如,用于测试时)。所以null不是内部方法的结果,但是Gdx.files本身是null。

简而言之,你不能只是在你想要的时候使用libgdx库方法,它是一个框架,而不是一个库。

我们使用的解决方法是: byte[] encoded; if (Gdx.files == null) encoded = Files.readAllBytes(Paths.get(cardsJsonFilePath)); else encoded = (Gdx.files.internal(cardsJsonFilePath)).readBytes(); return new String(encoded); 所以andoird应用程序不会崩溃,因为它永远不会使用代码的文件和路径部分(我有点惊讶它编译,但是meh。不会争论好事,对吧?)并且测试仍然可以使用它代替null Gdx.files字段。所以每个人都赢了!

玩得开心(并测试!)你的游戏! :)