当前位置: 首页 > 知识库问答 >
问题:

在libgdx中为JUnit测试加载资产

陆海阳
2023-03-14

我目前正在开发一个使用libgdx和java的游戏。我想在我的游戏的一些功能上运行一些JUnit测试,但是我在加载我的资产时遇到了困难。我试图实现Mockito,这样我就可以进行无头JUnit测试,看看这是否有助于解决问题,但这并没有帮助。这里是我试图加载资产的测试类(资产正在第17行加载)

import com.kroy.game.FireEngine;
import com.kroy.game.Fortress;
import com.kroy.game.Tile;
import org.junit.Test;
import org.junit.runner.RunWith;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;

@RunWith(GdxTestRunner.class)
public class FireEngineTests {

    Tile testTile = new Tile();
    FireEngine testFireEngine = new FireEngine(100, 10, 10, testTile, 10, 100, "fireEngineSprite.png");
    Class ReflectionClass = FireEngine.class;

    @Test
    public void testRefillAmount() {
        testFireEngine.refillAmount(50);
        assertEquals(50, testFireEngine.getWaterAmount());
        testFireEngine.refillAmount(5000);
        assertEquals(100, testFireEngine.getWaterAmount());

    }


    @Test
    public void testCanShoot() {

    }


    @Test
    public void testDeath() {
        testFireEngine.setHealth(0);
        assertTrue(testFireEngine.isDisabled());
    }

    @Test
    public void testTakeDamage() {
        try {
            testFireEngine.setHealth(100);
            Method takeDamageReflection = ReflectionClass.getDeclaredMethod("takeDamage");
            takeDamageReflection.setAccessible(true);
            takeDamageReflection.invoke(50, takeDamageReflection);
            assertEquals(50, testFireEngine.getHealth());

            takeDamageReflection.invoke(5000, takeDamageReflection);
            assertEquals(0, testFireEngine.getHealth());

        } catch (NoSuchMethodException e) {

        } catch (InvocationTargetException e) {

        } catch (IllegalAccessException e) {

        }
    }

    @Test
    public void testTransferTo() {
        Tile newLocation = new Tile(2,2);
        try {
            Method transferToReflection = ReflectionClass.getDeclaredMethod("transferTo");
            transferToReflection.setAccessible(true);
            transferToReflection.invoke(newLocation, transferToReflection);
            assertEquals(testTile.getInhabitant(),null);
            assertEquals(newLocation.getInhabitant(), testFireEngine);

        } catch (NoSuchMethodException e) {

        } catch (InvocationTargetException e) {

        } catch (IllegalAccessException e) {

        }
    }

    @Test
    public void testShootTarget() {
        Fortress testFortress = new Fortress(1000, 10,2,testTile, "fortress1", "lavaTile.png");

        testFireEngine.shootTarget(testFortress);

        assertEquals(testFortress.getHealth(), (testFortress.getMaxHealth() - testFireEngine.getDamage()));
        assertEquals(99, testFireEngine.getWaterAmount());
    }
}

以下是我尝试运行的每个测试的错误消息

com.badlogic.gdx.utils.GdxRuntimeException: Asset not loaded: /Users/michaelShepherd/Documents/University Work/Year 2/SEPR/Assessment 3/Septagon3/tests/assets/fireEngineSprite.png

搜索到的文件肯定位于指定的位置,我还将资产文件夹设置为该模块的资源根目录,但仍然没有加载该文件。

有什么建议吗?

共有1个答案

仲孙经赋
2023-03-14

我不知道你是如何在FireEngine类中处理纹理的,但是你可能需要像在游戏中一样通过AssetManager加载和访问纹理。

 类似资料:
  • 我试图使用Junit5为特定的服务类创建单元/集成测试,以避免整个项目过载。 测试类: 错误: 2019-04-03 14:56:06.146警告732---[main]O.S.W.C.S.GenericWebApplicationContext:上下文初始化过程中遇到异常-取消刷新尝试:org.springframework.beans.factory.unsatisfiedDependency

  • 很抱歉打扰你,我知道这个问题已经有人问过了,但我无法解决。我已经开始使用libgdx,并决定有一本书作为教程--“学习LigbGDX游戏开发”。这一切都很好,直到第4章,我不能装载资产到峡谷邦尼。包。我不知道发生了什么事。在../canyonbunny-android/assets/images中创建了两个文件-一个是png,另一个是atlas。如果你能帮我一把,我将非常欢迎。 控制台 影像包装.

  • 问题内容: 我的问题的答案可能非常简单和愚蠢,但到目前为止我自己还找不到。使用Play Framework,emberjs和FluentLenium,我编写了一个非常简单的功能测试,但不能使其在 IntelliJ IDEA 13下工作* 。由于某些原因,当我使用IntelliJ运行测试时, 找不到 位于 public /和app / 文件夹中的所有 资产 。 * 这是我的代码: 这是我在Intel

  • 我的Junit测试类是这样配置的,以允许autowired。 我的如下所示 在测试上下文中,src/test/resources/application.properties只是空的。 H2应该是一个内存数据库,不能在两个启动之间保存数据!为什么我会收到这些错误? 有什么想法吗?谢谢

  • 我用JPA Hibernate开发了一个SpringBoot应用程序,它运行得非常好。现在我不得不从测试开始,我真的不知道如何解决这个错误: 我的PlayersRepository是: 我见过这个答案,但没有找到解决方法。我应该更改或添加什么?以前从没用过这种东西,请好心点。

  • 我使用的是spring-boot-1.5。在单元测试期间,是否有方法在src/test/resources中加载application.properties?我知道如何使用integration test加载它,我们可以使用@SpringBootTest或@ContextConfiguration,但我想在单元测试期间使用Application.Properties。 任何指点或帮助都将是非常值得