获取Mongoengine的实际DB状态以进行单元测试

时间:2014-03-28 09:56:32

标签: python mongodb unit-testing mongoengine

我有一个单元测试,用于测试对帖子的评论是否正确添加到MongoDB数据库。有一个集合Post,其中ListField包含名为comments的字符串。 Post是继承自MongoEngine的Document的类,它具有自定义方法createadd_comment

class TestNotSaving(TestCase):
    def setUp(self):
        Post.create(text='sample post')

    def tearDown(self):
        # Post.drop_collection()
        pass

    def test_comments(self):
        comment = 'This is a sample comment.'
        post = Post.objects[0]
        post.add_comment(comment)
        # post.save()
        self.assertEqual(post.comments[0], comment)

问题在于,如果我不使用save方法将文档保存到数据库,则MongoEngine的行为仍然就像创建文档并存储注释一样。但是,如果您没有在代码中正确保存文档,我想编写一个失败的测试。如何刷新MongoEngine文档的状态?

1 个答案:

答案 0 :(得分:0)

如果不尝试从数据库加载数据以确保它已保存,则无法真正实现这一点。

save中的MongoEngine检查是否存在_idself._created,但这样就知道尝试插入或插入。但只有保存和对数据库说话才能让你知道它是成功的,并且没有违反任何独特的索引。

但是,您可以使用insert和/或update将数据保存到数据库中(这比使用save更明确,后者使用它们)。