使用fixture运行python测试用例时面临的问题

2024-09-30 22:21:10 发布

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

我想测试我的主要python代码,它只有一个类和几个方法,如下所示

class SampleClass:
     def sampleconnect(self):
        ## method to connect returns cursor from:
        return self.connection.cusor

现在在我的测试代码中,我将如何调用fixture并返回类和连接游标的实例 我在下面试过,但没有成功”

import pytest

#c1 = None

#cur=None
@pytest.fixture(scope="class")
def db():
    print("In the SetUp")
    c1 = connect_to_s3.SampleClass()
    db = c1.sampleconnect()
    yield db
    print("Cleaning")
    db.close()

class MyTestCase:
    def test_connect(db):
        connect_to_s3.SampleClass.samplemethod(db)

在运行测试用例时,它不会将db识别为从fixture返回的游标。另外,我如何将类实例和游标都返回到我要测试的类方法中


Tags: to实例方法selfnonedbpytestdef
1条回答
网友
1楼 · 发布于 2024-09-30 22:21:10

fixture example

这是一个非常好的例子,与您的案例类似

代码中可能存在的两个错误:

def test_connect(db):应该在类内def test_connect(self, db):

def sampleconnect(self):没有参数,而connect_to_s3.SampleClass.samplemethod(db)没有参数,不确定它是静态的还是类方法

下面是一个从链接复制和粘贴的好例子

# content of test_db_transact.py

import pytest


class DB:
    def __init__(self):
        self.intransaction = []

    def begin(self, name):
        self.intransaction.append(name)

    def rollback(self):
       self.intransaction.pop()


@pytest.fixture(scope="module")
def db():
    return DB()


class TestClass:
    @pytest.fixture(autouse=True)
    def transact(self, request, db):
        db.begin(request.function.__name__)
        yield
        db.rollback()

    def test_method1(self, db):
        assert db.intransaction == ["test_method1"]

    def test_method2(self, db):
       assert db.intransaction == ["test_method2"]

相关问题 更多 >