gpt4 book ai didi

python - 如何使用 nosetests 分解 python 测试用例

转载 作者:太空狗 更新时间:2023-10-30 01:30:26 24 4
gpt4 key购买 nike

我在图 f()、g() 和 h() 上有几个函数,它们针对同一问题实现了不同的算法。我想使用单元测试框架对这些函数进行单元测试。

对于每个算法,多个约束应该始终有效(例如空图、只有一个节点的图等)。这些通用约束检查的代码不应重复。因此,我开始设计的测试架构如下:

class AbstractTest(TestCase):
def test_empty(self):
result = self.function(make_empty_graph())
assertTrue(result....) # etc..
def test_single_node(self):
...

然后是具体的测试用例

class TestF(AbstractTest):
def setup(self):
self.function = f
def test_random(self):
#specific test for algorithm 'f'

class TestG(AbstractTest):
def setup(self):
self.function = g
def test_complete_graph(self):
#specific test for algorithm 'g'

...对每个算法依此类推

不幸的是,nosetests 尝试执行 AbstractTest 中的每个测试,但它不起作用,因为实际的 self.function 是在子类中指定的。我尝试在 AbstractTest Case 中设置 __test__ = False,但在这种情况下,根本没有执行任何测试(因为我想这个字段是继承的)。我尝试使用抽象基类 (abc.ABCMeta) 但没有成功。我读过有关 MixIn 的文章,但没有任何结果(我对它不是很有信心)。

我非常有信心我不是唯一尝试分解测试代码的人。你如何在 Python 中做到这一点?

谢谢。

最佳答案

Nose gathers classes匹配正则表达式或者是 unittest.TestCase 的子类,所以最简单的解决方案是两者都不做:

class AlgoMixin(object):
# Does not end in "Test"; not a subclass of unittest.TestCase.
# You may prefer "AbstractBase" or something else.

def test_empty(self):
result = self.function(make_empty_graph())
self.assertTrue(result)

class TestF(AlgoMixin, unittest.TestCase):
function = staticmethod(f)
# Doesn't need to be in setup, nor be an instance attribute.
# But doesn't take either self or class parameter, so use staticmethod.

def test_random(self):
pass # Specific test for algorithm 'f'.

关于python - 如何使用 nosetests 分解 python 测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5068100/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com