Comments 16
A QA engineer walks into a bar. Orders a beer. Orders 0 beers. Orders 99999999999 beers. Orders a lizard. Orders -1 beers. Orders a ueicbksjdhd.
— Brenan Keller (@brenankeller) November 30, 2018
First real customer walks in and asks where the bathroom is. The bar bursts into flames, killing everyone.
$ python test_sum_unittest.py
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
— Traceback (most recent call last):
File «test_sum_unittest.py», line 9, in test_sum_tuple
self.assertEqual(sum((1, 2, 2)), 6, «Should be 6»)
AssertionError: Should be 6
— Ran 2 tests in 0.001s
FAILED (failures=1)
2) Вывод nose2:
$ python -m nose2
.F
======================================================================
FAIL: test_sum_tuple (__main__.TestSum)
— Traceback (most recent call last):
File «test_sum_unittest.py», line 9, in test_sum_tuple
self.assertEqual(sum((1, 2, 2)), 6, «Should be 6»)
AssertionError: Should be 6
— Ran 2 tests in 0.001s
FAILED (failures=1)
При этом говорится, что
становится все сложнее понимать и использовать данные вывода unittest
Из примеров в статье не видно, в чем разница в выводе.
Спасибо за наводку! Очень интересная штука, о которой я не встречал упоминаний.
А ещё удивляет, почему так мало пишут про такую классную штуку, как property based testing. Причем в питоне есть просто офигенный фреймворк hypothesis как раз для этого.
Есть положительный опыт использования самого property based подхода в проекте на C++, есть опыт использования конкретно hypothesis в pet-проекте, и сейчас как раз в процессе переноса этого опыта на ещё один "боевой" проект.
Да, были мысли написать сборник идей для поиска свойств с примерами (обычно именно тут в начале самый большой затык с этим подходом происходит). Ну а если основные впечатления и кратко, то:
- обычные example-based тесты никто не отменял
- нужен некоторый опыт и определенная повернутость мозга, чтобы быстро придумывать хорошие property-тесты
- подходит не для всего (хотя чем больше опыта, тем для бОльшего количества проблем получается находить хорошие свойства)
- когда подходит (в моих случаях — подходит часто), то позволяет относительно небольшими усилиями вылавливать просто горы всяких edge-кейсов
Потому что в статьях про property based testing обычно рассматривается банальщина с числами и строками.
Да, нетривиальные (на мой взгляд) примеры очень даже есть, мотивация написать статью усилилась, осталось только найти время.
Надеюсь, статья вас не разочарует: https://habr.com/post/434008/
for name in dir(module):
obj = getattr(module, name)
if isinstance(obj, type) and issubclass(obj, case.TestCase):
tests.append(self.loadTestsFromTestCase(obj))
Знакомство с тестированием в Python. Ч.1