如何以python版本无关的方式检查http状态代码?

时间:2015-06-15 13:33:35

标签: python unit-testing httplib test-coverage http.client

我正在编写python代码,应该使用python 2.7和3.3 +

运行

我正试图找出一种正确检查http状态代码的方法,但不会降低我的测试覆盖率。

如果我写的话:

clbTables.DataSource = sqlDisplayContent.connectDataTable("SELECT ('Tafelnr: '+ CONVERT(varchar,tafelnr)+' Zitplaatsen: '+ CONVERT(varchar,zitPlaatsen)) AS dispValue,tafelnr  FROM tabel");
clbTables.DisplayMember = "dispValue";
clbTables.ValueMember = "tafelnr";



class sqlDisplayContent
        {
            public static DataTable connectDataTable(string query)
            {
                SqlCommand comm= sqlCrud.returnSqlCommand(query);
                SqlDataAdapter sda = new SqlDataAdapter(comm);
                DataTable dt = new DataTable();
                sda.Fill(dt);
                return dt;
            }
        }

Thankss

保险范围永远不会是100%

所以我的问题是:有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

在定位多个版本的Python时,您很少能够实现100%的测试覆盖率。 Python 2解释器将遵循一个执行路径,Python 3解释器将遵循另一个执行路径,并且解释器都不会命中每行代码。最好的解决方案是按照Martijn提到的那样做并使用# pragma: no cover。以下是我在其中一个项目中解决此问题的方法:

from sys import version_info
if version_info.major == 2:  # pragma: no cover
    from httplib import ACCEPTED, NO_CONTENT  # pylint:disable=import-error
else:  # pragma: no cover
    from http.client import ACCEPTED, NO_CONTENT  # pylint:disable=import-error

上述解决方案将满足coverage,flake8和pylint:

  • 在每个条件的末尾放置# pragma: no cover个注释会阻止覆盖范围对该行或下一个块中的任何内容进行计数。
  • # pylint:条评论的目的与此类似。
  • 在每个评论之前放置两个空格使flake8样式检查器开心。

我从SatelliteQE/nailgun nailgun/entities.py提取了上述代码。