jianbing / utx

对Python unittest的功能进行了扩展(用例排序,分组,数据驱动,可视化报告等)
MIT License
145 stars 59 forks source link

关于unittest 排序的问题 #5

Closed Hopetree closed 5 years ago

Hopetree commented 5 years ago

我搜索unittest 用例排序找到了你的代码,但是我发现一个问题,就是在获取class的函数属性的时候,其实是在从字典里拿数据,字典是无序的,那你拿到的函数根本不是按照添加的顺序排列的,所以你做的重命名也是在对本身顺序错误的列表进行重命名啊,

问题在于这里funcs_dict,这是一个字典,你迭代一个字典,每次的结果都是不一样的,这不是列表

@staticmethod
    def filter_test_case(funcs_dict):
        funcs = dict()
        cases = dict()
        for i in funcs_dict:
            if i.startswith("test_"):
                cases[i] = funcs_dict[i]
            else:
                funcs[i] = funcs_dict[i]

        return funcs, cases

我自己单纯只提供排序的元类,如下,也是有相同的问题,不知道这个怎么处理

class Meta(type):
    def __new__(cls, name, parents, attrs):
        LONG = 4
        id = 1
        _attrs = {}
        for k, v in attrs.items():
            if k.startswith('test_'):
                id_str = str(id).zfill(LONG)
                _k = k.replace('test_', 'test_{}_'.format(id_str))
                _attrs[_k] = v
                id += 1
            else:
                _attrs[k] = v
        return type.__new__(cls, name, parents, _attrs)

attrs.items() 是把一个无序的字典变成的列表,这个列表迭代也无法得到按照函数添加的顺序排序,不知道你是怎么做到可以按照添加的顺序来排序的?反正我看代码没有看出来

jianbing commented 5 years ago

这是Python3.6,dict被重写后的新特性