@coleifer と @avalanchy から素晴らしい回答を得て、さらに一歩進めました。
すべてのサブクラスで run メソッドをオーバーライドしないようにするために、基本クラスを使用できます...また、使用するすべてのTestCase
モデル クラスを書き留める必要がないというアイデアも気に入っているので、これを思いつきました
import unittest
import inspect
import sys
import peewee
from abc import ABCMeta
from playhouse.test_utils import test_database
from business_logic.models import *
test_db = peewee.SqliteDatabase(':memory:')
class TestCaseWithPeewee(unittest.TestCase):
"""
This abstract class is used to "inject" the test database so that the tests don't use the real sqlite db
"""
__metaclass__ = ABCMeta
def run(self, result=None):
model_classes = [m[1] for m in inspect.getmembers(sys.modules['business_logic.models'], inspect.isclass) if
issubclass(m[1], peewee.Model) and m[1] != peewee.Model]
with test_database(test_db, model_classes):
super(TestCaseWithPeewee, self).run(result)
だから、今は継承するだけTestCaseWithPeewee
で、テスト以外のことを心配する必要はありません