社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

有没有更有效/更好的方法用python编写测试用例?

Aria West • 3 年前 • 1431 次点击  

有没有更有效的方法用python编写测试用例?每当代码重复时,我的测试用例都会重复——有更好的方法来编写它,但有什么更好的方法呢? 这是我的代码:

def are_anagrams(s1, s2):
    if len(s1) != len(s2):
        return False
    elif sorted(s1) == sorted(s2):
        return True
    else:
        return False

    #all below I want to write in a better way
#Test cases
        s1 = "danger"
        s2 = "garden"
        print(are_anagrams(s1,s2))
        t1 = "nameless"
        t2 = "salesmen"
        print(are_anagrams(t1,t2))
        a1 = "name"
        a2 = "sale"
        print(are_anagrams(a1,a2))
        b1 = "n"
        b2 = "sa"
        print(are_anagrams(b1,b2))
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/131988
 
1431 次点击  
文章 [ 2 ]  |  最新文章 3 年前
Cory Kramer
Reply   •   1 楼
Cory Kramer    3 年前

您应该使用一个实际的单元测试库,比如内置的 unittest 单元

import unittest

def are_anagrams(s1, s2):
    if len(s1) != len(s2):
        return False
    elif sorted(s1) == sorted(s2):
        return True
    else:
        return False
        
class TestAnagrams(unittest.TestCase):
    def test_anagrams(self):
        self.assertTrue(are_anagrams('danger', 'garden'))
        self.assertTrue(are_anagrams('nameless', 'salesmen'))
    def test_not_anagrams(self):
        self.assertFalse(are_anagrams('name', 'sale'))
        self.assertFalse(are_anagrams('n', 'sa'))
        
if __name__ == '__main__':
    unittest.main()
Samwise
Reply   •   2 楼
Samwise    3 年前

不要为只会使用一次的值创建命名变量,尤其是在名称没有添加任何有用信息的情况下(这适用于一般代码,而不仅仅是测试):

print(are_anagrams("danger", "garden"))
print(are_anagrams("nameless", "salesmen"))
print(are_anagrams("name", "sale"))
print(are_anagrams("n", "sa"))

如果你 assert 而不是仅仅打印期望值;这样,您就不需要查看输出并将其与您期望的结果进行比较,您只需运行测试,如果它没有引发 AssertionError 你知道代码的工作方式与你期望的一样:

assert are_anagrams("danger", "garden")
assert are_anagrams("nameless", "salesmen")
assert not are_anagrams("name", "sale")
assert not are_anagrams("n", "sa")

编写这样的测试序列的另一种方法是创建一个表,然后遍历它,例如:

test_cases = [
    ("danger", "garden", True),
    ("nameless", "salesmen", True),
    ("name", "sale", False),
    ("n", "sa", False),
]

for s1, s2, result in test_cases:
    assert are_anagrams(s1, s2) == result

当测试用例更复杂时,表格技术更有用,因为它可以更容易地直观地组织测试数据,以验证您是否覆盖了所有可能的输入组合;它还提供了动态生成表的可能性。