コード例 #1
0
class TestDeveloper(unittest.TestCase):

    def setUp(self):
        self.dev1 = Developer('tim')
        self.dev2 = Developer('tom')
        self.dev3 = Developer('tina')

    def test_equality(self):
        self.assertEqual(self.dev1, self.dev2)
        self.dev1.change_karma(self.dev2, 5)
        self.dev2.change_karma(self.dev1, 5)
        self.assertEqual(self.dev1, self.dev2)

    def test_gt_lt(self):
        self.dev1.change_karma(self.dev2, 1)
        self.assertGreater(self.dev1, self.dev2)
        self.dev2.change_karma(self.dev1, 2)
        self.assertGreater(self.dev2, self.dev1)
        self.dev3.change_karma(self.dev2, 3)
        self.assertLess(self.dev2, self.dev3)

    def test_typecheck(self):
        with self.assertRaises(ValueError):
            self.dev1.change_karma(self.dev2, 'string')
        with self.assertRaises(ValueError):
            self.dev1.change_karma(self.dev1, 5)

    def test_repr_str(self):
        expected = "Developer('tim')"
        self.assertEqual(repr(self.dev1), expected)
        self.dev1.change_karma(self.dev3, 5)
        expected = 'Developer tim with 5 karma'
        self.assertEqual(str(self.dev1), expected)

    def test_karma_change(self):
        self.dev1.change_karma(self.dev2, 5)
        self.assertEqual(self.dev1.karma, 5)
        self.dev1.change_karma(self.dev2, -3)
        self.assertEqual(self.dev1.karma, 2)
        self.dev1.change_karma(self.dev2, -4)
        self.assertEqual(self.dev1.karma, -2)
        logmsg = "tim's karma changed to -2"
        self.assertEqual(self.dev1.log[-1], logmsg)

    def test_karma_boundaries(self):
        self.dev1.change_karma(self.dev3, MAX_POINTS+1)
        self.assertEqual(self.dev1.karma, 5)
        self.assertIn('generous', self.dev1.log[-2])
        self.dev1.change_karma(self.dev3, -MAX_POINTS-1)
        self.assertEqual(self.dev1.karma, 0)
        self.assertIn('mean', self.dev1.log[-2])

    def test_greatest_fan_and_call(self):
        self.dev1.change_karma(self.dev2, 1)
        self.dev1.change_karma(self.dev3, 4)
        self.dev1.change_karma(self.dev2, 4)
        self.assertEqual(self.dev1.greatest_fan, 'tom')
        self.dev1.change_karma(self.dev3, 2)
        self.assertEqual(self.dev1.greatest_fan, 'tina')
        self.assertEqual(self.dev1.karma, 11)
        report = self.dev1()
        self.assertRegex(report[2], r'^tina\s+6$')
        self.assertRegex(report[3], r'^tom\s+5$')