Комментарии 5
Вот и весь код. И не нужно возиться с импортами и классами.
Это вредные советы. Ненавижу, когда вместо ясных и понятных импортов и классов какая-то магия и чтобы понять, как работает функция из двух строчек, необходимо полчаса лопатить документацию (если она есть) и/или исходники.
В unittest эти зависимости можно выделить с помощью методов
setUp()
иtearDown()
, чтобы их могли использовать все тесты в классе. Однако при этом вы можете нечаянно сделать зависимость теста от конкретного элемента данных или объекта неявной.
Не понимаю, что тут неявное, как раз очень все прямо и понятно.
Он подразумевает явное объявление зависимостей, которые остаются доступными для повторного использования благодаря фикстурам (fixtures).
А вот здесь как раз все весьма неявно. А если нужно запустить фикстуру в теле теста, нужно городить огород.
У pytest философия — это тесты без бойлерплейта. Фикстуры — мощная штука, но "магии" и неявности действительно многовато. IDE вроде PyCharm-а умеет работать с pytest, можно перескакивать на определение функций-фикстур, она знает о том, что фикстуры возвращают и т.п. Но в целом я согласен, что pytest в своём стремлении к минимизации написания кода-обвязки, сам по себе очень магический и неявный. Но лично мне он нравится сильно больше чем unittest — вербозный, монстроузный, перетянутый как есть из Java.
А если нужно запустить фикстуру в теле теста, нужно городить огород.
Ну не особо то и огород, по сути просто фикстура, возвращающая callable и всё.
В unittest мне не нравится главным образом, то, что он не следует питоновским соглашениям о менованию классов и методов.
Но зато там можно писать тесты, которые через несколько месяцев можно будет глянуть, и сразу ясно, что происходит, где и откуда.
А pytest в своем стремлении уменьшить количество строк кода максимально затрудняет чтение и понимание тестов. Вот это мне и не нравится.
Ведь как известно, пишем код один раз, а читаем десять. Я фанат подхода, когда можно читать исходный код как книгу, без разгадывания черной магии м даже белой.
Много полезной и актуальной информации, благодарю.
Когда нужны фикстуры
А как насчет Вэн нидэд фикстуры? Fixture - это фиксированный набор данных, а в случае с monkeypatch заглушка.
На мой взгляд эта статья не полна без пояснений о monkeypatch и assertpy. И ради всего святого используйте типы в сигнатурах, не на python 2 пишете же.
def test_my_stuff(monkeypatch: MonkeyPatch):
# Arrange
# Act
# Assert
pass
Эффективное тестирование с помощью Pytest