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

September 2017

S M T W T F S
     1 2
3 4 5 6 789
1011 121314 1516
171819 20 2122 23
24252627282930

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Sep. 25th, 2017 04:50 pm
Powered by Dreamwidth Studios