class PokemonTestClass(unittest.TestCase): _ID = 1 def setUp(self): random.seed(13) self.pokemon = Pokemon(self._ID, 10, "BC", "Flyboy", ability="wings") def test_constructor(self): self.assertIsInstance(self.pokemon, Pokemon) with self.assertRaises(TypeError): p = Pokemon("hi", 10, "BC", "Flyboy", "Wings of Bud", "wings") with self.assertRaises(ValueError): p = Pokemon(0, 10, "BC", "Flyboy", "Wings of Bud", "wings") with self.assertRaises(TypeError): p = Pokemon(self._ID, 10, 0, "Flyboy", "Wings of Bud", "wings") with self.assertRaises(ValueError): p = Pokemon(0, 10, "", "", item="Wings of Bud") def test_id(self): self.assertEqual(self.pokemon.id, self._ID) def test_pokedex_num(self): self.assertEqual(self.pokemon.pokedex_num, 10) def test_nickname(self): self.assertEqual(self.pokemon.nickname, "Flyboy") with self.assertRaises(ValueError): self.pokemon.nickname = '' self.pokemon.nickname = 'bob-jim' self.assertEqual(self.pokemon.nickname, 'bob-jim') def test_in_party(self): self.assertFalse(self.pokemon.in_party) def test_weight(self): # 50 and 1000 come from private class variables in PartyMember class self.assertGreaterEqual(self.pokemon.weight, 50) self.assertLessEqual(self.pokemon.weight, 1000) def test_height(self): # 80 and 1500 come from private class variables in PartyMember class self.assertGreaterEqual(self.pokemon.height, 80) self.assertLessEqual(self.pokemon.height, 1500) def test_source(self): self.assertEqual(self.pokemon.source, "BC") def test_date_acquired(self): self.assertEqual(self.pokemon.date_acquired, datetime.now().date()) def test_held_item(self): self.assertEqual(self.pokemon.held_item, "None") self.pokemon.held_item = "Wings of Bud" self.assertEqual(self.pokemon.held_item, "Wings of Bud") def test_moves(self): self.assertEqual(len(self.pokemon.moves), 4) def test_xp_till_next_level(self): # 80 and 120 come from private class variables in Pokemon class self.assertGreaterEqual(self.pokemon.xp_till_next_level, 80) self.assertLessEqual(self.pokemon.xp_till_next_level, 120) def test_level(self): self.assertEqual(self.pokemon.level, 5) self.pokemon.add_xp(self.pokemon.xp_till_next_level) self.assertEqual(self.pokemon.level, 6) def test_ability(self): self.assertEqual(self.pokemon.ability, "wings") p = Pokemon(self._ID, 10, "BC", "Flyboy") self.assertEqual(p.ability, 'None') def test_elemental_type(self): self.assertTupleEqual(self.pokemon.elemental_type, ("Flying", "Dragon")) p = Pokemon(self._ID, 9, "BC", "Flyboy") self.assertTupleEqual(p.elemental_type, ("Ground", )) def test_attack(self): # 3 and 18 come from private class variables in Pokemon class self.assertGreaterEqual(self.pokemon.attack, 3) self.assertLessEqual(self.pokemon.attack, 18) def test_defense(self): # 3 and 18 come from private class variables in Pokemon class self.assertGreaterEqual(self.pokemon.defense, 3) self.assertLessEqual(self.pokemon.defense, 18) def test_speed(self): # 3 and 18 come from private class variables in Pokemon class self.assertGreaterEqual(self.pokemon.speed, 3) self.assertLessEqual(self.pokemon.speed, 18) def test_total_hp(self): # 5 and 35 come from private class variables in Pokemon class self.assertGreaterEqual(self.pokemon.total_hp, 15) print(self.pokemon.total_hp, 'HP') self.assertLessEqual(self.pokemon.total_hp, 35) def test_current_hp(self): # 35 comes from private class variables in Pokemon class self.assertLessEqual(self.pokemon.current_hp, 35) def test_KO(self): self.assertFalse(self.pokemon.is_KO) self.pokemon.damage(self.pokemon.current_hp) self.assertTrue(self.pokemon.is_KO) def test_description(self): self.assertEqual(self.pokemon.description, f"Your {self.pokemon.nickname} is {self.pokemon.height}cm tall and {self.pokemon.weight}kg. \n " \ f"Current level: {self.pokemon.level}, exp to next level: {self.pokemon.xp_till_next_level}. \n" \ f"Not currently in party") def test_use_move(self): self.assertEqual(self.pokemon.use_move(1), "Flyboy used Growl!! it did 0 damage!") with self.assertRaises(ValueError): self.pokemon.use_move(5) with self.assertRaises(ValueError): self.pokemon.use_move(-1) def test_display_moves(self): # self.assertEqual() self.maxDiff = None expected_str = "\nMove Index |Move Name |Damage \n============================================\n1 |Growl |0 \n2 |Tail Whip |0 \n3 |Splash |0 \n4 |Leer |0 \n" self.assertEqual(self.pokemon.display_moves(), expected_str) expected_str = "\nMove Index |Move Name |Damage \n============================================\n1 |Growl |0 \n" self.assertEqual(self.pokemon.display_moves(1), expected_str) with self.assertRaises(ValueError): self.pokemon.display_moves(-1) with self.assertRaises(ValueError): self.pokemon.display_moves(5) def test_add_xp(self): # 3 and 18 come from private class variables in Pokemon class self.assertGreaterEqual(self.pokemon.xp_till_next_level, 80) self.assertLessEqual(self.pokemon.xp_till_next_level, 120) self.assertEqual(self.pokemon.level, 5) self.pokemon.add_xp(self.pokemon.xp_till_next_level + 1) self.assertEqual(self.pokemon.level, 6) def test_heal(self): self.assertEqual(self.pokemon.current_hp, self.pokemon.total_hp) with self.assertRaises(TypeError): self.pokemon.heal("eee") self.pokemon.heal(1) self.pokemon.damage(10) self.pokemon.heal(5) def test_member_type(self): self.assertEqual(self.pokemon.member_type(), "Pokemon") def test_to_dict(self): poke_dict = self.pokemon.to_dict() test_dict = { "id": self.pokemon.id, "member_type": self.pokemon.member_type(), "pokedex_num": self.pokemon.pokedex_num, "source": self.pokemon.source, "nickname": self.pokemon.nickname, "item": None, "in_party": self.pokemon.in_party, "weight": self.pokemon.weight, "height": self.pokemon.height, "date_acquired": str(self.pokemon.date_acquired), "ability": self.pokemon.ability, "elemental_type": self.pokemon.elemental_type, "next_level_xp": self.pokemon._next_level_xp, "current_level_xp": self.pokemon._current_level_xp, "level": self.pokemon.level, "attack": self.pokemon.attack, "speed": self.pokemon.speed, "total_hp": self.pokemon.total_hp, "current_hp": self.pokemon.current_hp, "is_KO": self.pokemon.is_KO, "moves": self.pokemon.moves } self.assertEqual(poke_dict, test_dict)