查找Python库以模拟数据库

时间:2011-05-10 19:00:45

标签: python database django testing mocking

我即将完成一个涉及Python的大学项目,我的团队有一个测试用例短缺。我们需要更多,具体而言,我们需要一些数据库测试用例。然而,这是嘲弄的地方。我们需要一个特定于Python的库来模拟数据库,因此测试用例不使用SQL或访问真实数据库。我们正在使用MySQL作为真正的数据库。我遇到一个易于使用的Python数据库模拟库有点困难。什么是最适合我们的测试用例?或者,有没有更好的方法在Python中测试数据库而不触及它?我非常感谢你的建议。谢谢: - )

5 个答案:

答案 0 :(得分:6)

如果绝对必须使用模拟而不是其他人提到的Django,我建议使用FudgeMock

答案 1 :(得分:4)

如果您使用的是django,灯具可以解决您的问题。我真的不知道你是什么意思通过模拟库,但它们允许你用测试数据填充你的数据库。然后,您可以与TestCase进行交互。每个TestCase后销毁测试数据。 http://docs.djangoproject.com/en/dev/howto/initial-data/

答案 2 :(得分:2)

我个人倾向于编写单元测试以使用单独的测试数据库,因此我通常会有一个testing.conf文件,其中包含与常规development.conf和/或{{1不同的数据库信息文件。这使我的单元测试更加类似于生产中执行代码的实际条件。

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

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

答案 3 :(得分:1)

基于一些评论,看来你正在使用Django。如果是这种情况,那么您将需要使用数据夹具将测试数据填充到测试数据库中。关于这个主题的一个很好的资源是Karen M. Tracey的书Django 1.1 Testing and Debugging

以下是您想要做的事情的总结:

  1. 使用管理界面将数据输入您的实时/真实数据库。
  2. 使用以下方法转储实时数据库中的数据:

    python manage.py dumpdata {django-app} --indent 4 >test_data.json
    

    {django-app}替换为您的Django应用程序的名称。

  3. test_data.json放在目录{django-app}/fixtures

  4. 指定您的测试用例应使用以下方式加载灯具数据:

    Class MyTest(TestCase):
    
        fixtures = ['test_data.json']
    
        def testThisCode(self):
            # Test code
    
  5. 有关详细信息,除了Karen M. Tracey's book之外,您可以查看Django关于Fixture Loading的文档

答案 4 :(得分:0)

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

http://python-mock.sourceforge.net/#example-usage