LINUX.ORG.RU

Python unittest

 


0

1

Подскажите, для чего полезен модуль unittest в Питоне? Я раньше тесты своих программ хранил в директории tests/ проекта, и про «юнит-тесты» слышал только краем уха. Зачем они нужны, и где необходимы? (имеется ввиду, именно в Питоне)

★★★★★

Удобная обёртка для тестов, см. доки. Если не нравится то использовать никто не заставляет, есть 100500 других запускалок тестов. Но я остановился на unittest т.к. он есть из коробки и его возможности мне кажутся достаточными для моих несложных сценариев.

true_admin ★★★★★
()

почитай про nose. Это инфраструктура вокруг твоих тестов, то есть ты пишишь только тесты, а их сбор, прогон и тд берет на себя nose. В нем много полезностей, как-то статистика покрытия кода тестами, или возможность запустить только те из них, которые провалились на предыдущей итерации.

Yur4eg ★★
()
Ответ на: комментарий от baverman

А разве чем-то неудобная? Наоборот, намного лучше, чем в java, без всего этого boilerplate.

anonymous
()
Ответ на: комментарий от true_admin

Много бойлерплейта, классы, дурацкие self.assert*, нет зависимостей (вернее их надо самому организовывать через наследование, буэ). После py.test это непотребство нагоняет такую скуку.

Для написания тестов не должно быть никаких препятствий, а unittest сам по себе нихилый такой порог.

baverman ★★★
()
Ответ на: комментарий от baverman

Да, py.test поинтереснее смотрится.

дурацкие self.assert*

А у py.test есть свой набор стандартных ассертов? Типа asssertIsinstance итп. Сходу в доках не нашёл.

true_admin ★★★★★
()
Ответ на: комментарий от baverman

это очень хреновые ассерты потому что assert isinstance(obj, Class) не скажет почему сработал assert, оно просто напишет assertion error. А assertIsInstance напишет тип obj и какой тип ожидается.

true_admin ★★★★★
()
Ответ на: комментарий от true_admin

потому что assert isinstance(obj, Class) не скажет почему сработал assert

/tmp$ cat boo.py 
class Boo(object): pass
class Foo(object): pass
    
def test_instance():
    foo = Boo()
    assert isinstance(foo, Foo)



/tmp$ py.test-2.7 boo.py 
========================================================= test session starts ==========================================================
platform linux2 -- Python 2.7.3 -- pytest-2.2.4
collected 1 items 

boo.py F

=============================================================== FAILURES ===============================================================
____________________________________________________________ test_instance _____________________________________________________________

    def test_instance():
        foo = Boo()
>       assert isinstance(foo, Foo)
E       assert isinstance(<boo.Boo object at 0x8b81a6c>, Foo)

boo.py:6: AssertionError

Ня!

baverman ★★★
()
Ответ на: комментарий от true_admin

You can simply use the assert statement for asserting test expectations. pytest’s Advanced assertion introspection will intelligently report intermediate values of the assert expression freeing you from the need to learn the many names of JUnit legacy methods.

И в самом деле няшно. Any chance it will make its way into the core python library?

anonymous
()
Ответ на: комментарий от anonymous

Any chance it will make its way into the core python library?

Судя по курсу, взятому в unittest2 — no way.

baverman ★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.