vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner
Написать на питноновском unittest такие тесты, чтобы в их код было страшно заглядывать, это надо постараться.
Но некоторым товарищам это удается.

Например, вместо

with self.assertRaisesRegexp(SomeException,'сообщение об ошибке'):
    do_something()


пишут:

try:
   do_something()
   # we need to die here because exception is what we expect
   exit(1)
except SomeException as e:
   self.assertEqual(True,'сообщение об ошибке' in e.message)



При этом это те же самые люди которые громко кричали что использовать перловый unit-test фреймворк Test::More (и его постгресовые расширения) это некошерно потому что перл это бяка и вообще. Ну если вы настаиваете на использовании какого-нибудь инструмента, так хоть выучите его!

Date: 2017-05-16 03:34 pm (UTC)
From: [identity profile] tzirechnoy [lj.rossia.org]
А что, Фролков ужэ от вас ушёл?

Date: 2017-05-17 07:57 am (UTC)
From: [identity profile] tzirechnoy [lj.rossia.org]
Как-то странно, он рядом, кричали что перл бяка и ушли непросвещёнными.

Date: 2017-05-16 07:51 pm (UTC)
From: [identity profile] vlad-suh.livejournal.com
try ... except assert - это понятно.
Но вот exit(1) - до этого-то как додуматься можно?

Date: 2017-05-16 10:33 pm (UTC)
avnik: (Default)
From: [personal profile] avnik
С with красивее ;)

Да и еще есть идиома with suppress(ExceptionClass): (правда не помню это только в 3.x или в 2.7 тоже портировали)

Date: 2017-05-17 06:36 am (UTC)
allter: (Default)
From: [personal profile] allter
Perl ругают не те, кто его знает (хотя, как и у любого явления, недостатков у него полно). Его ругают те, кто его не знает, не может понять, не хочет его изучать и при этом психологически страдает от вида своего же кода в стиле "line noise".

Python создаёт ощущение, что код понятен. А то, что, например, в вашем нижнем примере не обрабатывается случай другого, неожиданного исключения, это не так бросается в глаза. Или там в обвязке проверяется, что на один юнит-тест - строго один assert?

Date: 2017-05-17 07:59 am (UTC)
From: [identity profile] tzirechnoy [lj.rossia.org]
Ну, те кто его знает (Слоник там. Чистяков опять жэ) -- тожэ его запросто ругают.

Date: 2017-05-17 08:13 am (UTC)
allter: (Default)
From: [personal profile] allter
Да. Я тоже его ругаю. :) Но я не говорю: "X - панацея и все срочно переходите на X".

Date: 2017-05-17 11:32 am (UTC)
allter: (Default)
From: [personal profile] allter
А, т.е. там на верхнем уровне магически добавляется обработчик? Я привык к перлу - там тест сам пишет ok/not ok и если скрипт нежданно умер или вышел, то "not ok" не напишется (возможно, конечно, напишется что-то другое, но что это относится к определённому тесту - не сразу поймёшь). :)

Date: 2017-05-18 06:43 pm (UTC)
From: [identity profile] vlad-suh.livejournal.com
Почти не знаю питон, думал, там как в Java, которая в подобном случае System.exit() выйдет вместе со всем JUnit.

Date: 2017-05-19 09:21 am (UTC)
netch: (Default)
From: [personal profile] netch
Логика очень проста - perl вреден тем, что на нём сильно сложнее устойчиво писать большие программы. Подробнее:

1. Слишком расслабленное отношение к некоторым проблемам - например, взятие в хэше по несуществующему ключу даёт undef, а чтобы давало исключение (die()) - надо сделать громоздко. Python даёт лёгкий и понятный способ и задать умолчание, и сделать исключение. Таких проблем несколько, но пример с хэшом понятнее всего.

2. Тяжёлый переход от стиля для одностраничного скрипта к стилю большой программы (когда, например, меняешь списки напрямую на ссылку на список, то же для хэша, ещё и наталкиваясь на некоторые диверсии языка).

3. Многотонный синтаксический мусор - вместо a.b.c имеем $a->{b}{c}, и это уже с применением заметного количества сахара (а без него ещё кошмарнее). Рябит в глазах, замыливает взор.

4. Наплевательское отношение к типизации скаляра - является значение строкой, числом или чем-то ещё, можно выяснить только хакерством, типа функций модуля B, а скрытые конверсии прячут проблемы, например:

$ perl -e 'print "1x"+2,"\n";'
3

Поэтому что-то действительно большое лучше на перле не писать - задолбёшься.

Date: 2017-05-18 09:52 am (UTC)
From: [identity profile] amarao-san.livejournal.com
unittest уныл. Особенно assertEqual. pytest наше всё:

with pytest.raises(MyException):
foo()

Или:
def test_foo():
    assert foo() == 'bar'

Без всяких assertEqual.

ЗЫ И unittest'овые тесты оно тоже поддерживает, если кому приспичило.

Date: 2017-05-18 11:17 am (UTC)
From: [identity profile] amarao-san.livejournal.com
Аргументацию принимаю, хотя мне не совсем понятно в чём проблема с чистопитоновым модулем. Он же кросс-платформенный, не? Pip-то у вас там есть?

Date: 2017-05-18 12:30 pm (UTC)
From: [identity profile] amarao-san.livejournal.com
А, стоп, у вас пакетные менеджеры? так же есть python-pytest. Я не стал про него упоминать, потому что думал что мне про винду расскажут.

Вот, например, для rhel6: http://rpm.pbone.net/index.php3/stat/4/idpl/27865457/dir/centos_6/com/pytest-2.3.5-3.el6.centos.noarch.rpm.html

Date: 2017-05-18 12:54 pm (UTC)
From: [identity profile] amarao-san.livejournal.com
Ну, соответственно, где есть - пакеты, где нет - pip'ы. Собственно, иметь свой миррор для pip'а - мастхэв для питонячьего devops'а. Особенно с учётом вашего зоопарка.

А какой пакетный менеджер в aix? curl|bash?

Date: 2017-05-18 02:12 pm (UTC)
From: [personal profile] anonim_legion
А ведь вы - единственный в РФ поставщик вашего особенного постгреса? Если да, то это российские поделки должны гнуться под вас, а не наоборот.

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

May 2017

S M T W T F S
  12 3 4 5 6
7 8910 11 12 13
1415 1617 18 1920
2122 23 24 25 2627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated May. 27th, 2017 03:42 pm
Powered by Dreamwidth Studios