对Student类编写单元测试,结果发现测试不通过,请修改Student类,让测试通过

题目来源:
廖雪峰python教程
原题目代码:

import unittest

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score
    def get_grade(self):
        if self.score >= 60:
            return 'B'
        if self.score >= 80:
            return 'A'
        return 'C

class TestStudent(unittest.TestCase):

    def test_80_to_100(self):
        s1 = Student('Bart', 80)
        s2 = Student('Lisa', 100)
        self.assertEqual(s1.get_grade(), 'A')
        self.assertEqual(s2.get_grade(), 'A')

    def test_60_to_80(self):
        s1 = Student('Bart', 60)
        s2 = Student('Lisa', 79)
        self.assertEqual(s1.get_grade(), 'B')
        self.assertEqual(s2.get_grade(), 'B')

    def test_0_to_60(self):
        s1 = Student('Bart', 0)
        s2 = Student('Lisa', 59)
        self.assertEqual(s1.get_grade(), 'C')
        self.assertEqual(s2.get_grade(), 'C')

    def test_invalid(self):
        s1 = Student('Bart', -1)
        s2 = Student('Lisa', 101)
        with self.assertRaises(ValueError):
            s1.get_grade()
        with self.assertRaises(ValueError):
            s2.get_grade()

if __name__ == '__main__':
    unittest.main()

运行结果:
在这里插入图片描述
可以看到测试有2处错误,第一处在line 19处,使用get_grade方法时断言错误。回头查看,发现get_grade方法定义时不准确,应该先判断≥80,再判断≥60.第二处错误在line 38,使用get_grade方法输入的grade没有限制范围。回头添加限制条件,使 0≥grade≥100时,方法正确调用,否则raise 一个 ValueError

修改后的代码如下:

import unittest

class Student(object):
    def __init__(self, name, score):
        self.name = name
        self.score = score
    def get_grade(self):
        if self.score > 100 or self.score < 0:
            raise ValueError
        if self.score >= 80:
            return 'A'
        elif self.score >= 60:
            return 'B'
        return 'C'

class TestStudent(unittest.TestCase):

    def test_80_to_100(self):
        s1 = Student('Bart', 80)
        s2 = Student('Lisa', 100)
        self.assertEqual(s1.get_grade(), 'A')
        self.assertEqual(s2.get_grade(), 'A')

    def test_60_to_80(self):
        s1 = Student('Bart', 60)
        s2 = Student('Lisa', 79)
        self.assertEqual(s1.get_grade(), 'B')
        self.assertEqual(s2.get_grade(), 'B')

    def test_0_to_60(self):
        s1 = Student('Bart', 0)
        s2 = Student('Lisa', 59)
        self.assertEqual(s1.get_grade(), 'C')
        self.assertEqual(s2.get_grade(), 'C')

    def test_invalid(self):
        s1 = Student('Bart', -1)
        s2 = Student('Lisa', 101)
        with self.assertRaises(ValueError):
            s1.get_grade()
        with self.assertRaises(ValueError):
            s2.get_grade()

if __name__ == '__main__':
    unittest.main()
设计一个学生Student,满足以下要求: 1. 学生有三个属性:姓名(name)、年龄(age)、学号(student_id); 2. 学生有一个方法:展示学生信息(display_info),该方法可以输出学生的姓名、年龄和学号; 3. 学生有一个方法:年龄增加(increase_age),该方法可以将学生的年龄加1; 4. 学生有一个方法:修改学号(modify_student_id),该方法可以修改学生的学号; 5. 设计一个测试函数,分别进行如下测试操作: a. 创建一个学生对象,姓名为"张三",年龄为18,学号为"2019001"; b. 调用学生对象的展示学生信息方法,输出学生的姓名、年龄和学号; c. 调用学生对象的年龄增加方法; d. 再次调用学生对象的展示学生信息方法,输出学生的姓名、年龄和学号; e. 调用学生对象的修改学号方法,将学号修改为"2020001"; f. 最后一次调用学生对象的展示学生信息方法,输出学生的姓名、年龄和学号。 设计完成后,进行上述测试操作可以得到以下输出结果: 姓名:张三 年龄:18 学号:2019001 姓名:张三 年龄:19 学号:2019001 姓名:张三 年龄:19 学号:2020001 以下为代码实现: ```python class Student: def __init__(self, name, age, student_id): self.name = name self.age = age self.student_id = student_id def display_info(self): print("姓名:{} 年龄:{} 学号:{}".format(self.name, self.age, self.student_id)) def increase_age(self): self.age += 1 def modify_student_id(self, student_id): self.student_id = student_id def test(): student = Student("张三", 18, "2019001") student.display_info() student.increase_age() student.display_info() student.modify_student_id("2020001") student.display_info() test() ``` 注意:这里提供的是Python代码实现,如果需要在其他编程语言中实现,可以参考以上的设计思路进行编写
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值