TearDown 不要求使用 Tornado 进行单元测试
tearDown not called for unittesting with Tornado
我将 Rethinkdb 和 Tornado 与 rethinkdb.set_loop_type("tornado")
一起使用
我正在使用 python 单元测试来测试我的服务器路由。
这是我的单元测试基础 class:
class ServerTest(AsyncHTTPTestCase):
def setUp(self):
super(ServerTest, self).setUp()
def get_app(self):
return Application(self.routes, debug = False)
def post(self, route, data):
result = self.fetch("/%s" % route, method = "POST",
body = json.dumps(data)).body
return json.loads(result)
def tearDown(self):
super(ServerTest, self).tearDown()
conn = yield r.connect()
yield r.db("test").table("test_table").delete().run(conn)
conn.close()
我注意到 setUp
是正确的 运行,但 tearDown
不是。我所有的单元测试都正确通过,但未调用 tearDown 中的打印语句。
编辑:我已将范围缩小到我在 tearDown 中调用 yield 的事实。
编辑:将@gen.coroutine 添加到 tearDown 会显示打印语句,但不会对数据库执行删除
使用 yield
和 @gen.coroutine
使函数异步,这会更改其接口:调用者 必须 知道此更改。 unittest
框架对协程一无所知,因此 unittest
调用的方法都不可能是协程。
您可以使用 @tornado.testing.gen_test
而不是 @gen.coroutine
,这样您就可以在测试中以及从 setUp
和 tearDown
调用的方法中使用 yield
,但不是 setUp
和 tearDown
本身(因为发电机无法在 super().setUp()
之前或 super().tearDown()
之后工作。使用 gen_test
的辅助方法并将其称为 没有 yield
tearDown
:
def tearDown(self):
self.tearDownHelper()
super(ServerTest, self).tearDown()
@tornado.testing.gen_test
def tearDownHelper(self):
conn = yield r.connect()
yield r.db("test").table("test_table").delete().run(conn)
conn.close()
我将 Rethinkdb 和 Tornado 与 rethinkdb.set_loop_type("tornado")
我正在使用 python 单元测试来测试我的服务器路由。
这是我的单元测试基础 class:
class ServerTest(AsyncHTTPTestCase):
def setUp(self):
super(ServerTest, self).setUp()
def get_app(self):
return Application(self.routes, debug = False)
def post(self, route, data):
result = self.fetch("/%s" % route, method = "POST",
body = json.dumps(data)).body
return json.loads(result)
def tearDown(self):
super(ServerTest, self).tearDown()
conn = yield r.connect()
yield r.db("test").table("test_table").delete().run(conn)
conn.close()
我注意到 setUp
是正确的 运行,但 tearDown
不是。我所有的单元测试都正确通过,但未调用 tearDown 中的打印语句。
编辑:我已将范围缩小到我在 tearDown 中调用 yield 的事实。
编辑:将@gen.coroutine 添加到 tearDown 会显示打印语句,但不会对数据库执行删除
使用 yield
和 @gen.coroutine
使函数异步,这会更改其接口:调用者 必须 知道此更改。 unittest
框架对协程一无所知,因此 unittest
调用的方法都不可能是协程。
您可以使用 @tornado.testing.gen_test
而不是 @gen.coroutine
,这样您就可以在测试中以及从 setUp
和 tearDown
调用的方法中使用 yield
,但不是 setUp
和 tearDown
本身(因为发电机无法在 super().setUp()
之前或 super().tearDown()
之后工作。使用 gen_test
的辅助方法并将其称为 没有 yield
tearDown
:
def tearDown(self):
self.tearDownHelper()
super(ServerTest, self).tearDown()
@tornado.testing.gen_test
def tearDownHelper(self):
conn = yield r.connect()
yield r.db("test").table("test_table").delete().run(conn)
conn.close()