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());
}