一套只守一条路的测试

👁️ 2 人浏览 💬 0 人评论 ❤️ 添加收藏

(每道题开头都有同一段:被测的 clean(rows)(去空白、空数量当 0、整行去重、转不了的记行号)、静音的 run(),和造记录用的 row(store, qty)。)

下面这套测试只有「正常值」一条用例。对正确版本和一个去掉 strip 的变异版各跑一遍:

import io, unittest

def clean(rows):
    good, bad, seen = [], [], set()
    for i, r in enumerate(rows, 2):
        r = {k: v.strip() for k, v in r.items()}
        if r["qty"] == "":
            r["qty"] = "0"
        key = tuple(r.values())
        if key in seen:
            continue
        seen.add(key)
        try:
            r["qty"] = int(r["qty"])
        except ValueError:
            bad.append(i)
            continue
        good.append(r)
    return good, bad

def run(*cases):
    suite = unittest.TestSuite()
    for c in cases:
        suite.addTests(unittest.defaultTestLoader.loadTestsFromTestCase(c))
    r = unittest.TextTestRunner(stream=io.StringIO()).run(suite)
    return str(r.testsRun) + "/" + str(len(r.failures)) + "/" + str(len(r.errors))

def row(store, qty):
    return {"store": store, "qty": qty}

def clean_no_strip(rows):
    good, bad, seen = [], [], set()
    for i, r in enumerate(rows, 2):
        if r["qty"] == "":
            r = dict(r, qty="0")
        key = tuple(r.values())
        if key in seen:
            continue
        seen.add(key)
        try:
            r = dict(r, qty=int(r["qty"]))
        except ValueError:
            bad.append(i)
            continue
        good.append(r)
    return good, bad

def clean_no_dedupe(rows):
    good, bad = [], []
    for i, r in enumerate(rows, 2):
        r = {k: v.strip() for k, v in r.items()}
        if r["qty"] == "":
            r["qty"] = "0"
        try:
            r["qty"] = int(r["qty"])
        except ValueError:
            bad.append(i)
            continue
        good.append(r)
    return good, bad

def clean_swallow(rows):
    good, bad, seen = [], [], set()
    for i, r in enumerate(rows, 2):
        r = {k: v.strip() for k, v in r.items()}
        if r["qty"] == "":
            r["qty"] = "0"
        key = tuple(r.values())
        if key in seen:
            continue
        seen.add(key)
        try:
            r["qty"] = int(r["qty"])
        except ValueError:
            r["qty"] = 0
        good.append(r)
    return good, bad

def make(fn):
    class T(unittest.TestCase):
        def test_normal(self):
            good, bad = fn([row("东门", "10")])
            self.assertEqual(good[0]["qty"], 10)
    return T

print(run(make(clean)) + "|" + run(make(clean_no_strip)))
提交你的答案
请登录后提交答案。
去登录
代码编辑器
Ctrl + Enter 运行
本次输入:
输出:

                        
👩‍🏫
AI
💬 题目评论

全部评论