我有一堆对象“实现”相同的“接口”。他们都应该表现出一些共同的行为,因此我想在所有这些类中进行测试。
我正在考虑有一个抽象的基础测试用例,其中包含由特定测试用例派生的常见内容。这个基类测试类中至少有一个抽象方法是从基类本身调用的,需要在派生类中定义。我不确定如何从基类调用派生类中定义的方法。如果我做 self.abstract_method,它会说方法没有定义。我怎么能调用这个方法?
如果这里有更好的方法来实现我的测试目标而不涉及继承,我会很高兴听到它。
我有一堆对象“实现”相同的“接口”。他们都应该表现出一些共同的行为,因此我想在所有这些类中进行测试。
我正在考虑有一个抽象的基础测试用例,其中包含由特定测试用例派生的常见内容。这个基类测试类中至少有一个抽象方法是从基类本身调用的,需要在派生类中定义。我不确定如何从基类调用派生类中定义的方法。如果我做 self.abstract_method,它会说方法没有定义。我怎么能调用这个方法?
如果这里有更好的方法来实现我的测试目标而不涉及继承,我会很高兴听到它。
import cPickle
import pickle
import unittest
class TestPickleBase:
def test_dumps_loads(self):
self.assertEqual(self.pickle_impl.loads(self.pickle_impl.dumps('a')), 'a')
class TestCPickle(unittest.TestCase, TestPickleBase):
pickle_impl = cPickle
class TestPickle(unittest.TestCase, TestPickleBase):
pickle_impl = pickle
if __name__ == '__main__':
unittest.main()
import cPickle
import pickle
import pytest
@pytest.mark.parametrize('pickle_impl', [pickle, cPickle])
def test_dumps_loads(pickle_impl):
assert pickle_impl.loads(pickle_impl.dumps('a')) == 'a'
import cPickle
import pickle
import pytest
@pytest.fixture(params=[pickle, cPickle])
def pickle_impl(request):
return request.param
def test_dumps_loads(pickle_impl):
assert pickle_impl.loads(pickle_impl.dumps('a')) == 'a'
您可以在抽象类中定义该方法的空白版本,以避免被告知该方法未这样定义:
class AbstractClass(object):
def abstract_method(self):
pass
class ConcreteClass(AbstractClass):
def abstract_method(self):
# Insert logic here.