本文档为上述“人民币数字大写转换”程序的黑盒测试实验报告
一、 标识
本文档适用系统: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))