
Savva
19.03.2019
04:59:42

Student
19.03.2019
05:00:47

Savva
19.03.2019
05:02:10

any
19.03.2019
05:43:23
Всем привет. Подскажите, как можно изменить переменную b из класса

Google

any
19.03.2019
05:43:28
class a:
def init(self):
b = 3
if name == 'main':
b = 1
a()
print(b)
Выводит 1, а нужно 3

Tishka17
19.03.2019
05:44:17
А почему ты решил что будет 3?
Ты в классе в ините создал локальную переменную и сохранил в нее 3

Aragaer
19.03.2019
05:44:36
надо global b и прочую подобную муть

Tishka17
19.03.2019
05:44:50
Не учи плохому

any
19.03.2019
05:45:08
Везде global писать - говнокод какой-то получается

Aragaer
19.03.2019
05:45:12
ага

Tishka17
19.03.2019
05:45:14

Aragaer
19.03.2019
05:45:19
ну оно уже говнокод, так что

Tishka17
19.03.2019
05:45:20

any
19.03.2019
05:45:38

Google

Tishka17
19.03.2019
05:45:53
Классу должно быть по барабану на внешние переменные
Есть поля, есть возвращаемые значения в методах или можно прокинуть внутрь какой-нибудь контейнер, в котором он сможет что-то менять

any
19.03.2019
05:47:35
Хорошо, буду думать

Tishka17
19.03.2019
06:19:24
Я тут чтото вспомнил. Почему-то люди противопоставляют функциональное и юнит-тестирование.
Так вот это не противоположности, а перпендикулярные оси. Делить тесты можно по разным признакам: функциональное vs тестирование производительности, юнит vs интеграционное.
И ещё: при юнит тестах не обязательно тестировать каждый метод класса. Юнитом вполне может считаться отдельный класс. Например, очевидно что геттер и сеттер одного поля нельзя проверить независимо не влезая во внутреннюю структуру объекта или не имея альтернативного сеттера (например параметра конструктора)

Aragaer
19.03.2019
06:22:20
ну я например в юнит тестах использую "сначала протестировал метод Х, затем тестирую метод У в предположении, что Х работает корректно"
и да, сеттеры-геттеры очевидно тоже

Tishka17
19.03.2019
06:23:34
это норм, да
но иногда X без Y не проверить же. Приходится покрывать пару

Aragaer
19.03.2019
06:24:11
вообще, я не сильно думаю на тему атомарности какой-то. Я если по тдд, то "так, мне надо такое поведение... как мне проще всего проверить это?"
и там как пойдет

Tishka17
19.03.2019
06:25:03
это да, просто несколько раз натыкался на “надо сначала проверить xxx, только потом yyy”. Да как я проверю что там сделал xxx без вызова yyy?

Aragaer
19.03.2019
06:25:45
ну условно, пусть я тестирую свой дикт и хочу проверить, что set и get работают

Tishka17
19.03.2019
06:26:02
типа
class X:
def __init__(self): self.data=0
def set(self, v): self.data=-v
def get(self): return -self.data
вполне нормальный класс

Aragaer
19.03.2019
06:26:03
я могу проверить, что без всяких set один get вполне вернет то, что передано в конструктор
я могу проверить, что сам по себе get вернет какой-нибудь эррор
и наконец я проверю, что после успешного set последующий get вернет то, что надо

Tishka17
19.03.2019
06:26:41

Сергей
19.03.2019
06:26:47

Aragaer
19.03.2019
06:27:17

Google

Tishka17
19.03.2019
06:27:42

Aragaer
19.03.2019
06:27:57
и не надо
поведение этого класса такое, какое надо

Tishka17
19.03.2019
06:28:05
исправив конструктор мы увеличим сложность класса и по сути тесты будут дублировать

Aragaer
19.03.2019
06:28:15
"исправлять" этот класс надо не из-за тестов

Tishka17
19.03.2019
06:28:15
меня пару раз убеждали что надо

Aragaer
19.03.2019
06:28:46
то есть так - не надо менять _поведение_ этого класса, оно правильное
но можно поменять его реализацию - то есть отрефакторить его
и для этого не нужно править тесты, потому что на этапе рефакторинга мы тесты не трогаем

Tishka17
19.03.2019
06:29:30
ну да, только тесты от этого не изменятся. Ну только если при реализации мы не захотим какие-то новые граничные значения проверить
вот и отлично

Aragaer
19.03.2019
06:31:11
вообще, если поведение класса описывается словами типа "есть get и set, если сначала сделать set, то потом get вернет то, что отдали в set, а если не вызывать set, то get вернет 0" - то для проверки этого поведения не нужно ничего, кроме того, что описано в этом поведении

LighteR
19.03.2019
06:33:28
@Tishka17 а что есть люди, которые утверждают что тест на get/set надо делать раздельными unit-test'ами?

Tishka17
19.03.2019
06:33:38
да
регулярно

LighteR
19.03.2019
06:34:13
по-моему все пишут один тест на get/set

Essentuki
19.03.2019
06:34:15

LighteR
19.03.2019
06:35:10
там же либо мокать надо, либо тестировать внутреннюю реализацию

Tishka17
19.03.2019
06:35:45
да

Daniel
19.03.2019
06:36:20
Тут есть люди, кто прогает на маке?)

Google

LighteR
19.03.2019
06:36:28
но если в get/set, например, запросы в базу, я бы замокал

Tishka17
19.03.2019
06:38:27

Daniel
19.03.2019
06:40:01
увы, я
Как поставить 3.7 питон на пичарм, у я не могу не интерфейс поменять, ни найти кнопочку за это отвечающую, я скачал питон с офф сайта и вроде он появился в выборе компиляторов
На маке*

Tishka17
19.03.2019
06:40:21

Aragaer
19.03.2019
06:40:30
вообще, в зависимости от заковыристости реализации, я бы могу предложить следующие тесты:
- только get
- set, потом get
- set, set, get
- set, get, get
- set, get, set, get

Daniel
19.03.2019
06:40:31
Ну, просто установил его
?

Tishka17
19.03.2019
06:41:09

Paul
19.03.2019
06:41:22
как передать по HTTP public key - alices_public_key
print(alices_public_key) # UmbralPublicKey:036e2d8feb51ad5
print(type(alices_public_key)) # "<class 'umbral.keys.UmbralPublicKey'>"
чтоб на flask сервере его можно было прочитать ?

Daniel
19.03.2019
06:41:46
А как в это меню попасть, если я в проекте нахожусь?

Tishka17
19.03.2019
06:41:54
а дальшне все кнопки на скрине

Daniel
19.03.2019
06:42:06
Спасибо

Tishka17
19.03.2019
06:43:32

Aragaer
19.03.2019
06:43:33
но на самом деле такие заковыристые тесты они бы родились не на пустом месте, а именно из реализации. "а, вы вон как хитро делаете! А тогда если я сделаю сначала get, потом set, а потом еще два раза get, то у вас все навернется"

Tishka17
19.03.2019
06:44:06

?
19.03.2019
06:44:07

Google

Aragaer
19.03.2019
06:44:21
не совсем. Это как обоснование для исправления

?
19.03.2019
06:44:36

Aragaer
19.03.2019
06:44:40
потому что "у вас тут не код, а говно" - "но оно же работает!" - "а вот вам тест" - "ну ок"

Paul
19.03.2019
06:44:47

LighteR
19.03.2019
06:45:12

Tishka17
19.03.2019
06:45:21
да
не надо https реализовывать во flask, юзай nginx

?
19.03.2019
06:45:27
да
Не буду ничего утверждать, но скорее всего фласк этим не занимается

LighteR
19.03.2019
06:45:49

Tishka17
19.03.2019
06:45:49

Paul
19.03.2019
06:46:16

Tishka17
19.03.2019
06:46:57