python unittest的基本测试用例类

时间:2013-08-11 04:01:44

标签: python unit-testing inheritance abstract-class

我有一堆对象“实现”相同的“界面”。他们都应该展示一些常见的行为,因此我想在所有这些类中进行测试。

我在想一个抽象的基本测试用例,其中包含常见的东西,然后由特定的测试用例派生。此基本测试类中至少有一个抽象方法,它从基类本身调用,需要在派生类中定义。我不知道如何调用基类派生中定义的方法。如果我做self.abstract_method,它会说方法没有定义。我怎么称呼这种方法?

如果有更好的方法来实现我的测试目标,这不涉及继承,我会很高兴听到它。

2 个答案:

答案 0 :(得分:3)

使用继承

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()

使用pytest

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'

答案 1 :(得分:1)

您可以在抽象类中定义方法的空白版本,以避免被告知方法未定义为:

class AbstractClass(object):

    def abstract_method(self):
        pass

class ConcreteClass(AbstractClass):

    def abstract_method(self):
        # Insert logic here.