проблемы, возникающие при запуске тестовых сценариев Python с использованием приборов - PullRequest
1 голос
/ 24 сентября 2019

Я хочу протестировать мой основной код 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 как курсор, возвращенный из прибора. Также, как я могу вернуть экземпляр класса и курсор в мой метод класса, который я хочу протестировать.

1 Ответ

0 голосов
/ 25 сентября 2019

пример прибора

Это очень хороший пример, похожий на ваш случай

2 возможных ошибки в вашем коде:

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"]
...