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

2024-05-14 17:53:18 发布

您现在位置:Python中文网/ 问答频道 /正文

举个例子:

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)就解开了这个谜。但我有一个案子,这不是一个选择。你知道吗

如何使用test_dog_paw中另一个基于TestCase的类的方法?你知道吗


Tags: fromtestimportselfreturndefcreateunittest
1条回答
网友
1楼 · 发布于 2024-05-14 17:53:18

就您提供的示例而言,我认为没有继承的必要。你可以很容易地做一些事情,比如:

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)

相关问题 更多 >

    热门问题