本文档为上述“人民币数字大写转换”程序的黑盒测试实验报告
一、 标识
本文档适用系统:Windows 11
二、系统概述
本文档测试“人民币数字大写转换”程序,具体功能如下:
1)中文大写金额数字应用壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、元、角、分、零、整(正)等字样。
2)中文大写金额数字到"元"为止的,在"元"之后,应写"整"(或"正")字,在"角"之后,可以不写"整"(或"正")字。
3)中文大写金额数字前应标明"人民币"字样,大写金额数字有"分"的,"分"后面不写"整"(或"正")字。
4)大写金额数字应紧接"人民币"字样填写,不得留有空白。
三、测试结果
黑盒测试又称功能测试、数据驱动测试或基于规格说明书的测试,是一种从用户观点出发的测试。本次测试将采用等价类划分方法,边界值方法来进行测试:
等价类划分测试:
测试项 | 用等价类划分方法来设计用例测试人民币大小写转换功能; |
方法原理 | 把所有可能的输入数据,即程序的输入域划分为若干个等价类(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例; |
测试环境要求 | Windows 11,python; |
预期输出 | 正确转换 或 提示错误; |
测试用例设计
测试用例 | 操作 | 数据 | 期望结果 | 实际结果 | 测试状态 |
1-1 | 不输入数据,并进行转换 | - | 提示不执行 | 无法执行 | Fail |
1-2 | 输入非法数据,并执行转换 | xxx | 提示不执行 | 程序无法执行 | Fail |
1-3 | 输入多个小数点,并执行转换 | 1...1 | 提示不执行 | 无法执行 | Fail |
1-4 | 输入超大数据 | 10000000000000000000000000000 | 提示不执行 | 程序无法 | Fail |
1-5 | 输入负值 | -1 | 负壹元整 | 负壹元整 | pass |
1-6 | 输入高精度数据 | 101.256 | 壹佰零壹元贰角伍分陆毫 | 人民币壹佰零壹元贰角伍分陆毫 | Pass |
1-7 | 输入包含连续零的数据 | ||||
1-8 | 输入不含零的数据 | 1234.56 | 人民币壹仟贰佰叁拾肆元伍角陆分 | 人民币壹仟贰佰叁拾肆元伍角陆分 | Pass |
1-9 | 输入角位是“0”,分位不是“0”的数据 | 1.01 | 人民币壹元零壹分 | 人民币壹元零壹分 | Pass |
1-10 | 输入前几位是“0”的数据 | 001223 | 人民币壹仟贰佰贰拾叁元整 | 人民币万零壹仟贰佰贰拾叁元整,程序继续运行 | Fail |
1-11 | 输入到元为止的数据 | ||||
1-12 | 输入角位、分位都为“0”的数据 | 1.00 | 人民币壹元整 | 人民币壹元整 | Pass |
代码;
def test(money):
cnNums = ["零","壹","贰","叁","肆","伍","陆","柒","捌","玖"]
cnIntRadice = ["", "拾", "佰", "仟"]
cnIntUnits = ["", "万", "亿", "兆"]
cnDecUnits = ["角", "分", "毫", "厘"]
cnInteger = "整"
cnIntLast = "元"
maxNum = 999999999999999.9999
# IntegerNum 金额整数部分
# DecimalNum 金额小数部分
ChineseStr = ""
parts =[]
Symbol = ""
if money == "":
return ""
money = float(money)
if money >= maxNum:
return ""
if money == 0:
ChineseStr = cnNums[0] + cnIntLast + cnInteger
return ChineseStr
if money < 0:
money = -money
Symbol = "负 "
money = str(money)
if money.find(".") == -1:
IntegerNum = money
DecimalNum = ""
else:
parts = money.split(".")
IntegerNum = parts[0]
DecimalNum = parts[1][0:4]
if int(IntegerNum) > 0:
zeroCount = 0
IntLen = len(IntegerNum)
for i in range(0,IntLen):
n = IntegerNum[i:i+1:1]
p = IntLen - i - 1
q = p // 4
m = p % 4
if n == "0":
zeroCount +=1
else:
if zeroCount > 0:
ChineseStr += cnNums[0]
zeroCount = 0
ChineseStr += cnNums[int(n)] + cnIntRadice[m]
if m == 0 and zeroCount < 4:
ChineseStr += cnIntUnits[q]
ChineseStr += cnIntLast
if DecimalNum != "":#小数部分
decLen = len(DecimalNum)
for i in range(0,decLen):
n = DecimalNum[i:i+1:1]
if n != "0":
ChineseStr += cnNums[int(n)] + cnDecUnits[i]
if ChineseStr == "":
ChineseStr += cnNums[0] + cnIntLast + cnInteger
elif DecimalNum == "0":
ChineseStr += cnInteger
ChineseStr = Symbol + ChineseStr
return ChineseStr
money = input()
print(test(money))