Python - что следует и не нужно тестировать
Я пытаюсь понять, что должно и не должно быть проверено. Даже после прочтения других вопросов / ответов по SO, я все еще не совсем понял это. Один из старших разработчиков в моей работе говорит, что весь мой код должен быть протестирован, но кажется, что тестировать его части - непросто, то есть когда эти части используют только тот код, который уже был протестирован.
В следующем примере есть функция http-запроса и функция get username. Все, что делает функция get username, это вызывает функцию http-запроса. Поскольку я использую Testbed, нет отправляемого HTTP-запроса, поэтому мы не проверяем правильность возвращаемых данных. Так стоит ли мне проверять функцию get username?
Код из проверяемого файла
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 ответа
кажется, что это непросто тестировать его части - то есть когда эти части используют только код, который уже был протестирован.
Как вы знаете, что вы используете эти части правильно, вместе?
Модульные тесты предназначены для быстрого выявления ошибок программирования - ошибок и изменений в интерфейсах.
Зависит от методологии тестирования, но я думаю, что тестирование каждой строки кода - хорошая идея для кода, который необходимо поддерживать. Это не значит, что каждая строка нуждается в собственном тесте. Вы можете использовать такие инструменты, как cover.py, чтобы увидеть, какие строки охватывают ваши тесты.