Test Plan for Saving Character State - UQcsse3200/2024-studio-1 GitHub Wiki

Objective

The purpose of this test plans to valid the functionality of saving character into a json file, specifically PlayerConfigGenerator class within the game as this class converts player's components into a writeable file.

Test Environment

  • FrameWork: JUnit4
  • Extensions: GameExtension for handling libGDX components
  • Objects Used: Entity class representing the player, InventoryComponent and CombatStatsComponent representing the player's inventory and combat stats. PlayerConfigGenerator class under test.

SetUp() Method

The setUp() method initializes key components before each test case, ensuring a consistent and clean test environment.

  • Player Entity (player): A new Entity instance is created, representing the player.
  • InventoryComponent (inventoryComponent): Manages the player's inventory, crucial for testing item and weapon saving.
  • CombatStatsComponent (statsComponent): Stores the player's health and attack stats, initialized with default values.

Test Cases

1. Test Case 1: Initialization with Default Player Attributes

  • Objective: Validate that the PlayerConfigGenerator correctly saves the player's state.
  • Setup:
    • A player entity is created with an InventoryComponent and CombatStatsComponent (health = 100, attack = 30).
  • Expected Outcome:
    • baseAttack is 30.
    • health is 100.
    • The items array is empty.

2. Test Case 2: Customized Combat Stats

  • Objective: Ensure that the PlayerConfigGenerator correctly saves custom combat stats.
  • Setup:
    • Player's combat stats are customized (health = 50, attack = 20).
  • Expected Outcome:
    • baseAttack is 20.
    • health is 50.

3. Test Case 3: Melee Weapon Equipped

  • Objective: Verify that the PlayerConfigGenerator correctly saves the equipped melee weapon.
  • Setup:
    • A melee weaponis equipped.
    • the specification of melee weapon is customised as it has not been implemented by weapons team yet.
  • Expected Outcome:
    • The melee attribute in PlayerConfig is set to "melee:".

4. Test Case 4: Ranged Weapon Equipped

  • Objective: Validate that the PlayerConfigGenerator correctly saves the equipped ranged weapon.
  • Setup:
    • A ranged weapon is equipped.
    • the specification of melee weapon is customised as it has not been implemented by weapons team yet.
  • Expected Outcome:
    • The ranged attribute in PlayerConfig is set to "ranged:".

5. Test Case 5: No Weapons Equipped

  • Objective: Ensure that PlayerConfigGenerator correctly handles cases where no weapons are equipped.
  • Setup:
    • No weapons are equipped.
  • Expected Outcome:
    • Both ranged and melee attributes in PlayerConfig are empty strings.

6. Test Case 6: Single Item in Inventory

  • Objective: Confirm that the PlayerConfigGenerator correctly saves a single item in the player's inventory.
  • Setup:
    • A single item (Health Potion) is added to the inventory.
  • Expected Outcome:
    • items array contains one string element: "Health Potion".

7. Test Case 7: Multiple Items in Inventory

  • Objective: Validate that the PlayerConfigGenerator correctly saves multiple items in the player's inventory.
  • Setup:
    • Multiple items (Energy bar, Food) are added to the inventory.
  • Expected Outcome:
    • items array contains two elements: ["Energy bar", "Food”].

8. Test Case 3: Saving Player Coins

  • Objective: Validate that the PlayerConfigGenerator correctly saves the player's coins.
  • Setup: Player is assigned 10 coins.
  • Expected Outcome:
    • coins is 10.

9. Test Case 4: Saving Player Speed

  • Objective: Validate that the PlayerConfigGenerator correctly saves the player's speed.
  • Setup: Player's speed is set to Vector2(5f, 5f).
  • Expected Outcome:
    • speed is Vector2(5f, 5f).

10. Test Case 8: Player with No Inventory Items

  • Objective: Ensure that the items array remains empty if the player has not collected any items.
  • Setup: Player has no items in their inventory.
  • Expected Outcome:
    • items.length is 0.

11. Test Case 11: Player's Max Health

  • Objective: Validate that the player's max health is saved correctly.
  • Setup: Player's max health is set to 120.
  • Expected Outcome:
    • maxHealth is 120.

12. Test Case 12: Saving Armor and Buffs

  • Objective: Ensure that player's armor and buffs are saved correctly.
  • Setup: Player picks up an armor item and a damage buff.
  • Expected Outcome:
    • armor is 20.
    • buff is 15.0f.

13. Test Case 13: Saving Critical Stats

  • Objective: Ensure that the player's critical stats are saved correctly.
  • Setup: Player has a critical chance of 5% and is able to perform critical hits.
  • Expected Outcome:
    • critChance is 5%.
    • canCrit is true.

14. Test Case 14: Saving Pets

  • Objective: Validate that the player's pets are saved correctly.
  • Setup: Player collects a pet ("dragon").
  • Expected Outcome:
    • pets[0] is "pet:dragon".
    • pets.length is 1.

15. Test Case 15: Multiple Pets

  • Objective: Ensure that multiple pets are saved correctly.
  • Setup: Player collects two pets ("Dragon", "Wolf").
  • Expected Outcome:
    • pets array contains "Dragon", "Wolf".
    • pets.length is 2.

16. Test Case 16: Player with No Coins

  • Objective: Ensure that player's coin count is saved correctly when the player has no coins.
  • Setup: Player has 0 coins.
  • Expected Outcome:
    • coins is 0.

17. Test Case 17: Player with Empty Inventory and No Pets

  • Objective: Validate that the PlayerConfigGenerator correctly saves a player with no items or pets.
  • Setup: Player has no items and no pets.
  • Expected Outcome:
    • items.length is 0.
    • pets.length is 0.

Execution

Tests were be executed using the JUnit framework within the development environment, ensuring that each test case passes independently, confirming the integrity and correctness of the PlayerConfigGenerator class.

Conclusion

This test plan provides comprehensive coverage of the PlayerConfigGenerator functionality, ensuring that player states are correctly captured and saved across different scenario