Syl*_*are 5 python tdd automated-tests unit-testing python-unittest
我正在开发回答相同问题但使用不同算法的多个功能。
因此,所有功能的相同输入应生成相同的输出,这就是为什么我不得不使用相同的单元测试,而不必使用相同的逻辑创建多个测试的原因。
我使用的是Python unittest框架,我想使用一个抽象测试类来用函数变量定义泛型测试,以便可以用要在另一个普通测试类中测试的泛型实例化该泛型函数。但是似乎我无法在子类中实例化函数变量。
因此,这里是一个示例抽象类,其中包含针对多个功能的通用测试。
class AbstractTestCase():
def test_generic_input_one(self):
result = self.function("input 1")
self.assertFalse(result)
def test_generic_input_two(self):
result = self.function("input 2")
self.assertTrue(result)
Run Code Online (Sandbox Code Playgroud)
在这里,您将拥有的特定测试类,该类function_a继承了AbstractTestCase该类的通用测试并实现了自己的测试。
class TestsFunctionA(AbstractTestCase, unittest.TestCase):
def setUp(self):
self.function = function_a
def test_specific_input(self):
result = self.assertTrue(self.function("specific input"))
self.assertTrue(result)
Run Code Online (Sandbox Code Playgroud)
我很确定它可以完成,但是我似乎找不到一个示例来了解如何实现它。我想避免代码重复。
最简单,最好的方法是什么?
我一直在寻找它并得到了几个例子,例如:
但是对我帮助最大的是vegard关于制作一个类工厂的回答,该工厂将接受参数并相应地创建 TestCase
该函数采用参数化测试用例的参数,实际的 TestCase 类可以毫无问题地引用它们。
这是一个示例,取一个foo.py文件:
import unittest
def make_test_case(x):
class MyTestCase(unittest.TestCase):
def test_foo(self):
self.assertEquals(x, 1)
return MyTestCase
class ConcreteTestCase(make_test_case(1)):
pass
Run Code Online (Sandbox Code Playgroud)
然后运行测试:
python -m unittest -v foo
Run Code Online (Sandbox Code Playgroud)
基本上,这非常灵活,并且非常适合我的用例。
| 归档时间: |
|
| 查看次数: |
1857 次 |
| 最近记录: |