Создать базу данных для модульного тестирования в sqlite - PullRequest
0 голосов
/ 02 апреля 2019

У меня есть простое управляемое классом приложение sqlite. По сути, я хочу запустить модульные тесты, но пока не смог.

class DB:
    def __init__(self, dbname='mydb.db'):    
        try:
            self.connection = sqlite3.connect(dbname)
        except:
            print('Error')
        finally:
            pass

Тогда любой класс будет использовать его:

class Hello:
    def hi(self):
        db = DB() # Create db or connect to existing one
        cursor = db.connection.cursor()

Теперь при тестировании я сдаю тестовую базу данных:

db = DB('test.db')
#create datatabase here and all works fine
h = Hello()

Теперь h использует mydb.db вместо test.db. Как можно протестировать вышеуказанную структуру?

1 Ответ

3 голосов
/ 03 апреля 2019

Если вы хотите передать экземпляр вашего DB класса (db), вам необходимо передать экземпляр вашему классу Hello.Попробуйте:

class DB:
    def __init__(self, dbname='mydb.db'):    
        try:
            self.connection = sqlite3.connect(dbname)
        except:
            print('Error')
        finally:
            pass

class Hello:
    def hi(self, db=DB()): # we make it have a default db of DB() (which in turn defaults to 'mydb.db')
        # db = DB() # Create db or connect to existing one
        # ^^ we remove this line because now this is the default
        cursor = db.connection.cursor()

db = DB('test.db') # this makes an instance of your DB class and calls it "db"
h = Hello(db) # now we need to feed this instance

Хотя это, вероятно, не лучший способ сделать это.Вы, вероятно, выиграете больше от наличия одного класса с методами, потому что ваш второй класс в основном бесполезен и в любом случае очень тесно связан с вашим первым классом:

class DB:
    def __init__(self, dbname='mydb.db'):    
        try:
            self.connection = sqlite3.connect(dbname)
        except:
            print('Error')
        finally:
            pass

    def hello(self): # making a method instead
        cursor = self.connection.cursor()

db = DB('test.db') # this makes an instance of your DB class and calls it "db"
db.hello() # call our method

РЕДАКТИРОВАТЬ

Я что-то пропустил изначальночто я нашел из тестирования моего кода.Ваш код должен работать нормально, но вам нужно вызвать метод, который вы сделали!Попробуйте это:

import sqlite3

class DB:
    def __init__(self, dbname='mydb.db'):
        try:
            self.connection = sqlite3.connect(dbname)
        except:
            print('Error')
        finally:
            pass

class Hello:
    def hi(self):
        db = DB('test.db')
        cursor = db.connection.cursor()

db = DB('test.db')
h = Hello() # make our instance
h.hi() # use the method "hi" associated with the class (our function name within the class)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...