Dingus ніби як макет об'єкта. Головна відмінність в тому, що ви не створили очікування заздалегідь. Ви просто запустіть свій код, використовуючи Dingus на місці іншого об'єкта або класу, і вона буде записувати те, що з ним відбувається. Потім, коли ваш код був виконаний, ви можете зробити твердження про те, що він зробив для Dingus.
Новий Dingus створюється з класу Dingus. Ви можете дати dinguses імена, які допомагає в налагодженні ваших тестів, особливо при наявності декількох dinguses в грі.
І NBSP; >>> від Dingus імпортувати Dingus
І NBSP; >>> d = Dingus ('корінь')
І NBSP; >>> d
І NBSP; <корінь Dingus>
Доступ до будь-атрибут Dingus повернеться нові Dingus.
І NBSP; >>> d.something
І NBSP;
Є кілька винятків для методів спеціальні Dingus. Ми побачимо, деякі в небагато.
Dingus також можна назвати як функції або методу. Це все одно, скільки аргументів ви даєте йому або те, що ці аргументи. Дзвінки на Dingus завжди буде повертати один і той же об'єкт, незалежно від аргументів.
І NBSP; >>> d ()
І NBSP;
І NBSP; >>> d ('аргумент')
І NBSP;
І NBSP; >>> d (55)
І NBSP;
Запис та затвердження
У будь-який час ми можемо отримати список дзвінків, які були зроблені до Dingus. Кожен запис у списку дзвінків містить:
І NBSP; * ім'я методу, названого (або "()", якщо сама Dingus називали)
І NBSP; * Аргументи, або (), якщо жоден
І NBSP; * The argumnets ключових слів, або {}, якщо жоден
І NBSP; * значення, яке було повернуто абоненту
Ось список дзвінків, які ми зробили, щоб D досі:
І NBSP; >>> від pprint pprint імпорту
І NBSP; >>> pprint (d.calls)
І NBSP; [('()', (), {},
І NBSP; ('()', ('аргумент',), {},
І NBSP; ('()', (55,), {},
Ви можете фільтрувати дзвінки по імені, аргументи, і іменованих аргументів:
І NBSP; >>> pprint (d.calls ('()', 55))
І NBSP; [('()', (55,), {},
Якщо ви не дбаєте про вартість конкретного аргументу, ви можете використовувати значення DontCare при фільтрації:
І NBSP; >>> від Dingus імпортувати DontCare
І NBSP; >>> pprint (d.calls ('()', DontCare))
І NBSP; [('()', ('аргумент',), {},
І NBSP; ('()', (55,), {},
Dinguses може зробити більше, ніж просто мати атрибути доступні і можна назвати. Вони підтримують безліч операторів Python. Мета полягає в тому, щоб дозволити, і записувати, будь-якої взаємодії:
І NBSP; >>> d = Dingus ('корінь')
І NBSP; >>> (2 ** d.something) ['привіт'] () / 100 * 'Foo'
І NBSP;
(Сподіваюся, ваш реальних Dingus записи не буде виглядати так!)
Внесення змін до
Dingus забезпечує менеджер контексту для виправлення об'єктів під час випробувань. Наприклад:
І NBSP; >>> від Dingus патч імпорту
І NBSP; >>> імпорту urllib2
І NBSP; >>> з патчем («urllib2.urlopen '):
І NBSP; ... друк urllib2.urlopen .__ class__
І NBSP; <клас "dingus.Dingus '>
І NBSP; >>> друку urllib2.urlopen .__ class__
І NBSP; <тип "функція">
Ви також можете використовувати це як декоратора на ваших методів випробувань:
І NBSP; >>> patch ('urllib2.urlopen')
І NBSP; ... Def test_something (само):
І NBSP; ... передача
І NBSP; ...
НЕБЕЗПЕЧНІ MAGIC
Dingus може також автоматично замінити глобальні модуля при виконанні тестів. Це дозволяє писати повністю ізольовані юніт-тестів. Дивіться приклади / urllib2 / test_urllib2.py для прикладу. НЕ автор уже не рекомендує цю функцію, так як це може сприяти дуже крихкі тести. Ви повинні відчувати біль вручну глузливі залежностей; . Біль скаже вам, коли клас співпрацює з дуже багатьма іншими
Вимоги
- Python
Коментар не знайдено