查找Python库以模拟数据库

查找Python库以模拟数据库,python,database,django,testing,mocking,Python,Database,Django,Testing,Mocking,我即将完成一个涉及Python的大学项目,我的团队缺少测试用例。我们需要更多,特别是,我们需要一些数据库的测试用例。然而,这正是嘲弄的用武之地。我们需要一个特定于Python的库,可以用来模拟数据库,因此测试用例不使用SQL或访问真实的数据库。我们将MySQL用于真正的数据库。对于我来说,遇到一个易于使用的Python数据库模拟库有点困难。对于我们的测试用例,什么是最好的?或者,有没有更好的方法可以在不接触数据库的情况下用Python测试数据库?我非常感谢你的建议。谢谢:-)我个人倾向于使用单独

我即将完成一个涉及Python的大学项目,我的团队缺少测试用例。我们需要更多,特别是,我们需要一些数据库的测试用例。然而,这正是嘲弄的用武之地。我们需要一个特定于Python的库,可以用来模拟数据库,因此测试用例不使用SQL或访问真实的数据库。我们将MySQL用于真正的数据库。对于我来说,遇到一个易于使用的Python数据库模拟库有点困难。对于我们的测试用例,什么是最好的?或者,有没有更好的方法可以在不接触数据库的情况下用Python测试数据库?我非常感谢你的建议。谢谢:-)

我个人倾向于使用单独的测试数据库编写单元测试,因此我通常会有一个
testing.conf
文件,其中包含与常规
development.conf
和/或
production.conf
文件分开的数据库信息。这使得我的单元测试与实际情况更加相似,在实际情况下,代码将在生产环境中执行

例如,我最近开发了一个Python库,用户为其调用模块级的
initialize
函数,并传入配置文件的名称。然后,
initialize
函数使用模块解析配置文件,启动它需要运行的任何线程,创建urllib处理程序,建立数据库连接,等等


这种设置允许进行简单的单元测试,因为您可以在执行之前让单元测试调用
initialize
函数,并传入指向测试数据库的配置。

如果您使用django,fixture可以解决您的问题。我真的不知道你们所说的模拟库是什么意思,但它们允许你们用测试数据填充你们的数据库。然后您可以在测试用例中与之交互。测试数据在每个测试用例之后被销毁。

根据一些评论,您似乎正在使用Django。如果是这种情况,那么您需要使用数据固定装置将测试数据填充到测试数据库中。卡伦·M·特蕾西(Karen M.Tracey)的书是关于这个主题的一个极好的资源

以下是您将要做的事情的摘要:

  • 使用管理界面将数据输入live/real数据库
  • 使用以下方法从实时数据库转储数据:

    python manage.py dumpdata {django-app} --indent 4 >test_data.json
    
    {django app}
    替换为您的django app的名称

  • test_data.json
    放入目录
    {django app}/fixtures

  • 指定测试用例应使用以下方式加载夹具数据:

    Class MyTest(TestCase):
    
        fixtures = ['test_data.json']
    
        def testThisCode(self):
            # Test code
    

  • 有关更多信息,除此之外,如果您绝对必须使用Mock而不是其他人提到的Django内容,您可以查看Django的文档。

    这里有一些关于使用Mock进行数据库测试的具体示例:


    您能否创建数据库的测试版本?如果出于某种原因您不想或不能使用MySQL进行测试,SQLite从2.7版开始与Python捆绑在一起。Python是否像Ruby一样使用内置数据库?我知道Ruby on rails框架有一个抽象,因此您不必构造SQL,这就是您所指的吗?Python语言没有类似的内置语言;如果你说的是我的想法,那是框架的功能,而不是ruby语言。我可能完全错了。是的,我说的是框架,Rails。我们使用的是Python框架Django。不幸的是,我认为您在错误的地方寻找功能。Python语言没有提供您想要的东西,但我认为没有。随着Eli的发展,听起来您可能需要配置Django/MySqlThank的测试实例……但我的领导需要一个模拟库……Python有一个好的、程序员友好的库吗?如果您的测试真的与数据库一起工作,那么它们不是“单元测试”,而是“集成测试”。模拟现在在Python 3的标准库中