在Python中的另一个单元测试中使用TestCase子类

问题描述 投票:0回答:1

这是一个例子:

from unittest import TestCase


class DogTest(TestCase):

    def create_dog(self, weight):

        dog = {'weight': weight}

        return dog


class DogPawTest(TestCase):

    def test_dog_paw(self):

        dog_test = DogTest()
        dog = dog_test.create_dog(weight=10)
        self.assertEqual(dog['weight'], 10)

它抛出

ValueError: no such test method in <class 'unittest_case_import.DogTest'>: runTest

测试用例应该是独立的。此外,create_dog可以而且应该在测试类之外。将定义更改为DogTest(object)解决了谜题。但我有一个案例,它不是一个选择。

如何在TestCase中使用另一个基于test_dog_paw的类的方法?

python unit-testing inheritance subclass python-unittest
1个回答
1
投票

使用您提供的示例,我认为不需要继承。您可以轻松地执行以下操作:

from unittest import TestCase

def create_dog(weight):
    return {'weight': weight}

class DogTest(TestCase):
    def test_dogs(self):
        heavy_dog = create_dog(25)
        ...

class DogPawTest(TestCase):
    def test_dog_paw(self):
        dog = create_dog(weight=10)
        self.assertEqual(dog['weight'], 10)

看看PyTest的fixtures也值得一看。这可能会将此代码更改为:

from unittest import TestCase
import pytest

@pytest.fixture
def dog():
    """Just your regular average dog"""
    return {'weight': 15}

@pytest.fixture
def heavy_dog():
    return {'weight': 30}

@pytest.fixture
def light_dog():
    return {'weight': 10}

class DogTest(TestCase):
    def test_dogs(self, heavy_dog):
        ...

class DogPawTest(TestCase):
    def test_dog_paw(self, dog):
        self.assertEqual(dog['weight'], 10)
© www.soinside.com 2019 - 2024. All rights reserved.