GoldComponent - UQdeco2800/2021-ext-studio-2 GitHub Wiki

Testing Ecosystem

the GameExtension class makes it easy by mocking the ligdx and game-engine classes

@ExtendWith(GameExtension.class)
public class GoldComponentTest

Java Lang Reflect: Used to access private methods and private fields of a class from the testing suite and make them accessible for testing purposes

JUnit: Used for assertions and class extendWith decorator plugins.

the logic of the gold component is used to check that when the player interacts with the gold, trigger the pick up event, increase the amount of gold got for the player character and remove the goldCoin entity from the game world.

BeforeEach

used to load corresponding services and remove the entity from the game world when the player character picks the goldCoin up

@BeforeEach
    void beforeEach() {
        ServiceLocator.registerPhysicsService(new PhysicsService());
        ResourceService resourceService = new ResourceService();
        final String[] Textures = {"images/Items/goldCoin.png"};
        resourceService.loadTextures(Textures);
        resourceService.loadAll();
        ServiceLocator.registerResourceService(resourceService);
        ServiceLocator.registerRenderService(new RenderService());
        ServiceLocator.registerEntityService(new EntityService());
    }

Creating the dummy goldCoin

the creating of this entity already has a function to check whether or not the goldCoin collides with the player character layer to trigger the pick up event in the GoldComponent

Entity createGold(Entity target){
        Entity entity = new Entity()
                .addComponent(new PhysicsComponent())
                .addComponent(new ColliderComponent())
                .addComponent(new HitboxComponent())
                .addComponent(new GoldComponent(target))
                .addComponent(new TextureRenderComponent("images/Items/goldCoin.png"));
        entity.create();
        return entity;
    }

Creating a dummy player character

Entity createPlayer() {
        final PlayerConfig stats =
                FileLoader.readClass(PlayerConfig.class, "configs/player.json");
        Entity target =
                new Entity()
                        .addComponent(new CombatStatsComponent(stats.health, stats.baseAttack))
                        .addComponent(new PhysicsComponent())
                        .addComponent(new HitboxComponent().setLayer(PhysicsLayer.PLAYER))
                        .addComponent(new InventoryComponent(stats.gold));

        target.create();
        return target;
    }

Check if the amount of gold got from the player should be increased

@Test
    void shouldIncreaseGoldGot(){

        Entity target = createPlayer();
        Entity entity = createGold(target);
        Fixture entityFixture = entity.getComponent(HitboxComponent.class).getFixture();
        Fixture targetFixture = target.getComponent(HitboxComponent.class).getFixture();
        entity.getEvents().trigger("collisionStart", entityFixture, targetFixture);
        assertEquals(51, target.getComponent(InventoryComponent.class).getGold());

    }