一、
假设我们编写了一段程序,主要功能是完成阿拉伯数字和罗马数字之间的转换
在罗马数字中,利用7个字母进行重复或者组合来表达各式各样的数字
I = 1 V = 5 X = 10 L = 50 C = 100 D = 500 M = 1000
还有一些关于构造罗马数字的规则。
此程序的框架如下:
其中,class RomanError是定义自己的Python异常 是一个类
OutOfRangeError 和 NotIntegerError 异常将会被用于toRoman 以标示不同类型的无效输入。
InvalidRomanNumeralError 将被最终用于 fromRoman 以标示无效输入
toRoman函数:将阿拉伯数字转换成罗马数字
fromRoman函数:将罗马数字转换成阿拉伯数字
二、
分析此程序的功能需求:
1、toRoman 应该能返回 应该能返回 应该能返回 应该能返回 应该能返回 1 到 3999 中任意数的罗马字表示。
2、toRoman 在遇到 1 到 3999 之外的数字时应该失败。
3、toRoman 在遇到非整数时应该失败。
4、fromRoman 应该能将给定的有效罗马数字表示转换为阿拉伯。
5、fromRoman 在遇到无效罗马数字表示时应该失败。
6、将一个数转换为罗马字表示,再回阿拉伯后应该和最初的数相同
7、toRoman 返回的罗马数字应该使用大写母。
8、fromRoman 应该只接受大写罗马数字
Python 有一个单元测试框架称作 unittest 模块
unittest 模块中的 TestCase 类提供了assertRaises 方法,它接受这几个参数: 预期的异常、测试函数,以及传递给参数
特别注意这里的操作:不是直接调用toRoman再手工查看是否引发特定异常,assertRaises为我们封装了这些。
我们只需要把异常(roman.OutOfRangeError)、函数(toRoman)、和参数(4000)传递给assertRaises
它会调用toRoman查看是否引发 roman.OutOfRangeError异常