使用 Flask + Nose(使用 Coverage 插件)进行单元测试 - 根据覆盖率报告永远不会调用视图
Unit testing with Flask + Nose (with Coverage plugin) - Views are never called according to coverage report
给定以下 Flask 视图
@contact.route('/contactInfo', methods=["POST"])
def contact_info():
return Response(httplib.OK)
以及以下简单的单元测试:
class TestContactViews(object):
def setUp(self):
self.app = create_app()
self.client = self.app.test_client()
def post_contact_info(self):
r_view = self.cient.post('/contactInfo')
assert_equals(r_view, httplib.OK)
当 运行 nosetests --with-coverage --cover-tests
时,视图的报告状态被标记为 Missing,因为它从未被调用过。是否缺少某些东西或需要一个选项?
注意:完整代码可在 GitHub
如果您将 -v
(详细)选项添加到 nosetests 命令,您将发现您的许多测试未被发现和执行。只有五个测试是 运行.
原因是具有单元测试的方法需要有一个以test_
前缀开头的名称。这就是鼻子找到它们的方式。所以基本上你需要将测试更改为:
def test_post_contact_info(self):
r_view = self.cient.post('/contactInfo')
assert_equals(r_view, httplib.OK)
我还建议您将 --cover-package=py_showcase
添加到您的 nose 命令中,以便过滤覆盖范围以仅显示您自己的代码,而不显示您在 virtualenv 中的第三方代码。
给定以下 Flask 视图
@contact.route('/contactInfo', methods=["POST"])
def contact_info():
return Response(httplib.OK)
以及以下简单的单元测试:
class TestContactViews(object):
def setUp(self):
self.app = create_app()
self.client = self.app.test_client()
def post_contact_info(self):
r_view = self.cient.post('/contactInfo')
assert_equals(r_view, httplib.OK)
当 运行 nosetests --with-coverage --cover-tests
时,视图的报告状态被标记为 Missing,因为它从未被调用过。是否缺少某些东西或需要一个选项?
注意:完整代码可在 GitHub
如果您将 -v
(详细)选项添加到 nosetests 命令,您将发现您的许多测试未被发现和执行。只有五个测试是 运行.
原因是具有单元测试的方法需要有一个以test_
前缀开头的名称。这就是鼻子找到它们的方式。所以基本上你需要将测试更改为:
def test_post_contact_info(self):
r_view = self.cient.post('/contactInfo')
assert_equals(r_view, httplib.OK)
我还建议您将 --cover-package=py_showcase
添加到您的 nose 命令中,以便过滤覆盖范围以仅显示您自己的代码,而不显示您在 virtualenv 中的第三方代码。