如何为这段代码编写单元测试代码

时间:2014-02-28 03:34:52

标签: python unit-testing

下面是我的代码,它根据字典中可用的密钥替换字符串中的一些字符:

import re

D = {'h':'hhh', 'l':'nnn'}
enpattern = re.compile(r'(.)\1?', re.IGNORECASE)

def convert(str):
    result = [x.group() for x in enpattern.finditer(str)]
    data = ''.join(map(lambda x:D.get(x.lower(), x.lower()), result))
    print data

如何为此代码编写单元测试,以使convert()的参数永远不是整数,并且它只应接受字符串或'$'之类的特殊字符。

如何编写单元测试,以便我可以检查charint或任何其他可以作为参数传递的数据类型。

1 个答案:

答案 0 :(得分:0)

没有特殊工具的单元测试:

print convert("somestring") == "expected_result_for_somestring"
print convert("otherstring") == "expected_result_for_otherstring"
print convert("stringWith$") == "expected_result_for_stringWith$"

或者你可能不需要“单元测试”但是“传递给convert()的参数测试”

def convert(param):
    if type(param) == int:
        print "wrong argument type: int"
        return 
    if type(param) == str and "$" in param:
        print "wrong char in string: $"
        return 

BTW:不要使用str作为变量名。


使用listfor

编辑原始测试

def convertTest():

    datas = (
        ( "somestring",  "expected_result_for_somestring"), 
        ( "otherstring", "expected_result_for_otherstring"), 
        ( "stringWith$", "expected_result_for_stringWith$")
    )

    for input, output in datas:
        print input, "result:", convert(input) == output

编辑:在“波兰Python Coders Group”论坛上将罗马数字转换为阿拉伯数字的3个函数(三个不同作者)的原始测试示例:

查找testowe(测试数据)和test()

http://pl.python.org/forum/index.php?topic=4399.msg18831#msg18831