这是我第一次使用 libGDX,我正在为一个学校项目编写一个桌面游戏。 要求在我们的模型类项目中实现测试,作业需要使用 jUnit 来执行这些测试。
我目前已在 build.gradle 中导入了 jUnit4,但是当我尝试通过 intelliJ 内的 gradle 菜单运行测试时,它在加载 libGDX 依赖项时出现错误。 环顾四周,我发现我应该使用 HeadlessApplication,因此我还在 build.gradle 中添加了这些依赖项,但现在我收到另一个错误。 主要问题似乎是加载纹理,在这里我向您发送错误消息:
Exception in thread "HeadlessApplication" java.lang.NullPointerException: Cannot invoke "com.badlogic.gdx.graphics.GL20.glCreateShader(int)" because "gl" is null
...
com.badlogic.gdx.utils.GdxRuntimeException: Couldn't load file: FirePuzzle/page.jpg
...
Caused by: com.badlogic.gdx.utils.GdxRuntimeException: File not found: FirePuzzle/page.jpg (Internal)
这是测试类实现:
public class FirePuzzleTest {
private Gioco game;
private FirePuzzle puzzle;
private HeadlessApplication application;
@Before
public void setUp() throws Exception {
game = new Gioco();
if(application == null){
HeadlessApplicationConfiguration config = new HeadlessApplicationConfiguration();
application = new HeadlessApplication(game, config);
}
puzzle = FirePuzzle.getInstance();
puzzle.setUpPuzzle();
}
@After
public void tearDown() throws Exception {
puzzle.setNull();
puzzle = null;
}
@Test
public void burnPage() {
int i = puzzle.getToBurn() - 1;
puzzle.burnPage(puzzle.getPages().get(0));
assertEquals(i, puzzle.getToBurn());
}
@Test
public void isSolved() {
assertFalse(puzzle.isSolved());
for (Image page : puzzle.getPages()){
puzzle.burnPage(page);
}
assertTrue(puzzle.isSolved());
}
}
您好,此错误是由于缺少 opengl 上下文造成的。 因此,HeadlessApplication 实际上是在服务器/虚拟机没有图形上下文或音频时启用服务器端访问 Vector2 等库内容,因此它是正常上下文创建的一种绕过,因为服务器端通常需要 libGDX 数学和网络但不渲染任何东西。因此,您的情况发生崩溃是因为您在加载文件时需要 openGL 上下文,大概是因为您绑定到纹理,但在无头模式下没有 openGL 上下文。
无头单元测试的想法是,您将单元测试限制为“仅业务逻辑”,即不需要 openGL 上下文,因为您无法真正针对帧缓冲区进行单元测试,或者只是创建一个普通上下文与正常设置一样的非无头,即
new Lwjgl3Application(...
btw libGDX 帮助可以在此处的 Discord 服务器上更容易获得 https://discord.com/channels/348229412858101762/1019870201505910845