使用Flask + Nose进行单元测试(使用Coverage插件) - 根据覆盖率报告永远不会调用视图

时间:2015-08-07 14:20:54

标签: python unit-testing flask code-coverage nose

给出以下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时,视图的报告状态标记为“丢失”,因为它从未被调用过。是否有遗漏或需要的选项?

注意:GitHub

上提供完整代码

1 个答案:

答案 0 :(得分:4)

如果在nosetests命令中添加-v(详细)选项,您将发现许多测试未被找到并执行。只有五项测试正在运行。

原因是具有单元测试的方法需要具有以test_前缀开头的名称。这就是鼻子找到它们的方式。所以基本上你需要将测试改为:

def test_post_contact_info(self):
    r_view = self.cient.post('/contactInfo')
    assert_equals(r_view, httplib.OK)

我还建议您将--cover-package=py_showcase添加到您的鼻子命令中,以便覆盖范围被过滤为仅显示您自己的代码,而不是您在virtualenv中的第三方代码。