使用鼻子测试txmongo依赖代码

2024-04-29 00:19:59 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用nose来测试我用twisted和txmongo编写的应用程序。我甚至不能得到像下面这样的简单用例: 从扭鼻工具进口反应堆,延期,螺纹式反应堆 导入日志记录 从扭曲的互联网导入延迟 导入txmongo

log = logging.getLogger("common.test.test_db")

conn = txmongo.lazyMongoConnectionPool('localhost', 27017, 4)

@deferred()
def test_mongo():
    tdb = conn.test

    @defer.inlineCallbacks
    def cb(oid):
        assert oid
        obj = yield tdb.test.find({"_id":oid})
        log.error("In callback")
        assert obj 

    d = tdb.test.save({"s":1, "b":2})
    d.addCallback(cb)

    return d

但是,这将始终返回以下值:

^{pr2}$

我尝试手动添加一个threaded_reactor()调用,但没有帮助。在

编辑

我删除了“惰性”连接,修改了代码,现在它可以工作了。。。我仍然很好奇为什么“懒惰”不起作用。工作代码如下:

dbconn = txmongo.MongoConnectionPool('localhost', 27017, 4)

@deferred()
def test_mongo():
    @defer.inlineCallbacks
    def cb(conn):
        tdb = conn.test
        oid = yield tdb.test.save({"s":1, "b":2})
        assert oid
        log.error(str(oid))
        obj = yield tdb.test.find({"_id":oid})
        assert obj 
        log.error(str(obj))
    dbconn.addCallback(cb)
    return dbconn

Tags: testlogobjlocalhostdeferrorassertconn
1条回答
网友
1楼 · 发布于 2024-04-29 00:19:59

MongoConnectionPool将返回一个deferred,当建立连接时,通过将连接处理程序作为参数传递给回调函数时,该函数将被激发。你应该conn = yield MongoConnectionPool()。在

lazyMongoConnectionPool将直接返回连接处理程序,而无需等待建立连接。在

Lazy通常由web服务器和其他在服务启动时不需要立即连接的服务使用。如果你想这样做,不要使用lazy方法。在

相关问题 更多 >