Python - 应该和不应该测试什么

时间:2014-05-19 16:48:43

标签: python unit-testing nose python-unittest

我正在努力了解应该和不应该测试的内容。即使在阅读了S.O.的其他问题/答案之后,我仍然没有真正理解它。我工作的一位高级开发人员说我的所有代码都应该进行测试,但是测试它的部分内容似乎很有必要 - 即当这些部分只使用已经过测试的代码时。

以下示例包含 http请求函数获取用户名函数。所有获取用户名功能都会调用 http请求函数。因为我正在使用Testbed,所以没有发出的HTTP请求,所以我们没有测试返回数据的正确性。那么我还应该测试获取用户名功能吗?

正在测试的文件中的代码

def fetch_url(url, method=urlfetch.GET, data=''):
    """Send a HTTP request"""

    result = urlfetch.fetch(url=url, method=method, payload=data,
                            headers={'Access-Control-Allow-Origin': '*'})

    return result.content


def get_user_name():
    """Get the name of the current user"""

    url = '{}/user?access_token={}'.format(GITHUB_API_URL, get_access_token())

    result = json.loads(fetch_url(url))

    return result['login']

以下是测试:

class TestUrlFetch(unittest.TestCase):
    """Test if fetch_url sending legitimate requests"""

    def setUp(self):
        self.testbed = testbed.Testbed()
        self.testbed.activate()
        self.testbed.init_urlfetch_stub()

    def test_fetch_url(self):
        from console.auth import fetch_url

        # Grab content via a URL fetch
        content = fetch_url('https://google.com')

        # Test that content is not empty
        self.assertIsNotNone(content)

    def tearDown(self):
        self.testbed.deactivate()

如上所述,我应该编写另一个测试来测试get_user_name函数吗?

2 个答案:

答案 0 :(得分:3)

取决于测试方法,但我认为测试每行代码对于需要维护的代码是一个好主意。这并不意味着每条线都需要自己的测试。您可以使用coverage.py之类的工具查看测试涵盖的行。

答案 1 :(得分:1)

  

似乎可以测试它的一部分 - 即当这些部分仅使用已经过测试的代码时。

你怎么知道你正在一起正确使用这些部件?

单元测试可以快速捕获编程错误 - 接口中的错误和更改。