Beispiel #1
0
class AnimalTests(unittest.TestCase):

    def test__init(self):
        self.animal = Animal("bear", 14, "Poll 1", 'male', 10.0)
        self.assertEqual("bear", self.animal.species)
        self.assertEqual(14, self.animal.age_in_months)
        self.assertEqual("Poll 1", self.animal.name)
        self.assertEqual('male', self.animal.gender)
        self.assertEqual(10.0, self.animal.kilos_weight)
        self.assertEqual({"bear": ["Poll 1"]}, self.animal.SPECIES_NAMES)

        self.assertEqual({"life_expectancy": 12,
                          "food_type": "meat",
                          "gestation_period": 6,
                          "newborn_weight": 20,
                          "average_weight": 100,
                          "weight_age_ratio": 9,
                          "food_weight_ratio": 0.2},
                         self.animal.json_species_data)

# Трябва ли да тествам невалидни Animal обекти,
# ако тествам set методите за данните?

    def test_set_species(self):
        self.animal = Animal("bear", 14, "Poll 2", 'male', 10.0)
        self.assertEqual("bear", self.animal._Animal__set_species("bear"))

    def test_set_species_no_such_species_in_database_value_error(self):
        self.animal = Animal("bear", 14, "Poll 3", 'male', 10.0)
        self.animal.json_species_data = None
        with self.assertRaises(ValueError):
            self.animal._Animal__set_species("seagull")

    def test_set_name(self):
        self.animal = Animal("bear", 14, "Poll 4", 'male', 10.0)
        self.assertEqual("Mark", self.animal._Animal__set_name("Mark"))

    def test_set_name_already_exists_value_error(self):
        self.animal = Animal("bear", 14, "Poll 5", 'male', 10.0)
        with self.assertRaises(ValueError):
            self.animal._Animal__set_name("Poll 5")

    def test_set_gender(self):
        self.animal = Animal("bear", 14, "Poll 6", 'male', 10.0)
        self.assertEqual("female", self.animal._Animal__set_gender("female"))

    def test_set_gender_value_error(self):
        self.animal = Animal("bear", 14, "Poll 7", 'male', 10.0)
        with self.assertRaises(ValueError):
            self.animal._Animal__set_gender("tomato")

    def test_set_kilos_weight_passed_argument(self):
        self.animal = Animal("bear", 14, "Poll 8", 'male', 10.0)
        self.assertEqual(42, self.animal._Animal__set_kilos_weight(42))

    def test_set_kilos_weight_no_passed_argument_take_newborn_weight(self):
        self.animal = Animal("bear", 14, "Poll 9", 'male', 2)
        self.assertEqual(self.animal.json_species_data['newborn_weight'],
                         self.animal._Animal__set_kilos_weight(None))

    def test_set_json_species_data_species_not_in_database(self):
        self.animal = Animal("bear", 14, "Poll 10", 'male', 10.0)
        self.assertEqual(None, self.animal._Animal__set_json_species_data(
            "database.json", "seagull"))

    def test_grow(self):
        self.animal_male = Animal("bear", 3, "Poll 11", 'male', 10.0)
        self.animal_male.grow(3)
        self.assertEqual(54, self.animal_male.kilos_weight)
        self.assertEqual(6, self.animal_male.age_in_months)

    def test_weight_simulated_time_average_weight_reached(self):
        self.animal = Animal("bear", 3, "Poll 12", 'male', 10.0)
        self.animal.grow(10)
        self.assertEqual(100, self.animal.kilos_weight)

    def test_pregnancy_simulated_time_pregnant_female(self):
        self.animal_female = Animal("bear", 13, "Pollinka 1", 'female', 10.0)
        self.animal_female.pregnant_period = 4
        self.animal_female.non_pregnant_period = None
        self.animal_female.grow(3)
        self.assertEqual(6, self.animal_female.pregnant_period)
        self.assertEqual(None, self.animal_female.non_pregnant_period)

    def test_pregnancy_simulated_time_non_pregnant_female(self):
        self.animal_female = Animal("bear", 13, "Pollinka 2", 'female', 10.0)
        self.animal_female.non_pregnant_period = 7
        self.animal_female.grow(3)
        self.assertEqual(6, self.animal_female.non_pregnant_period)
        self.assertEqual(None, self.animal_female.pregnant_period)

    def test_eat(self):
        self.animal = Animal("bear", 3, "Poll 13", 'male', 10.0)
        self.assertEqual(2, self.animal.eat())

    def test_die(self):
        # I don't know how to test this function
        # because it interacts with the global dictionary of names in Animal
        # and that brings some limitations
        pass

    def test_set_name_for_the_baby(self):
        # also not sure how to test such things
        pass

    def test_str(self):
        self.animal = Animal("bear", 3, "Poll 16", 'male', 10.0)
        self.assertEqual("Poll 16: bear, 3 months, 10.0 kilos",
                         self.animal.__str__())