Pull to refresh

Comments 9

Вы удаляете объекты после каждого теста?
Используете ли фикстуры общие для группы тестов или всех тестов?
Нет, мы не удаляем данные после теста, так как потом их наличие облегчает разбор проблем. Мы просто сделали так, что все создаваемые данные независимы, и не влияют друг на друга и на поведение других тестов. Мы не используем фикстуры при генерации данных: в случае необходимости удаления — это было бы логично, а в нашем случае не имеет особого смысла. Мы просто вызываем Builder в начале каждого теста.
Python к сожалению не знаю, но технология подготовки тестовых данных очень интересная.

Насколько я понимаю конструкция Collection возвращает список свежесгенерированных объектов, а можно ли с помощью этой конструкции получить список (подмножество) кешированных объектов, например подмножество тегов из уже зарегистрированных в графе?
К сожалению, пока ReusedCollection нет… Но сделать то же самое можно через InstanceModifier.thatDoes(), передав туда метод, который походит по дереву и запихает в нужное поле вашего объекта коллекцию объектов, собранных из дерева по какому-то алгоритму.
Хочу уточнить — немного не понял, что со сгенерированными объектами дальше происходит?
Те как эти данные попадают в БД, чтобы потом на них тесты гонялись?
Дальше вы сами пишете прослойку, которая сделает с этими объектами то, что вам надо. Например у нас есть 2 способа запихнуть эти объекты в систему: SqlAlchemy, чтобы смаршаллить объекты в базу и XMLRPC клиент, который дергает нужные методы системы, чтобы создать каждый объект из дерева. То есть мы легко можем, не изменяя процедуру генерации данных, по-разному создавать объекты в системе.
dchr, еще вопрос к вам.

В коде github.com/yandex-qatools/builders/blob/master/builders/tests/test_builder.py#L81
вы строите два экземпляра класса V и судя про проверке
assert v1.u.a == v2.u.a


предполагается, что объекты в свойстве «a» идентичны. Оно и понятно, ведь есть код:
a = Reused(A, local=True)

Но не все так просто, так как также есть код:
u = Unique(U)

который, мне как читателю говорит, что экземпляры U должны быть уникальными для v1 и v2, при этом как-то надо переиспользовать a и b в этом самом U.

Видимо я не понял политику Constructs Unique. Не могли бы вы пояснить этот момент, так как, я не уверен, что правильно понял предложение «Уникальный в том смысле, что даже если в нашем графе уже где-то есть объект типа typeToBuild, мы все равно сгенерим новый.» Под уникальностью Unique понимается не контент объекта, как в случае с Reused, а ссылка на память?

Сразу извинюсь, если сейчас чушь спрашиваю, может просто код неверно прочитал — про python навыков увы нет.
Да, вы совершенно верно поняли, что, поскольку в классе V поле u объявлено Unique, то экземпляры U, попадающие в это поле, будут уникальными, т.е. разными для каждого объекта V. При этом, в классе U поля a и b объявлены Reused, т.е. их значения будут переиспользоваться между разными объектами класса U, если у них совпадает ключевой атрибут (см описание Reused тут: jenkins.qatools.ru/job/python-builders-release/Sphinx_Documentation/builders.html#builders.construct.Reused).

В обоих случаях уникальность понимается именно в смысле идентичности конкретного объекта, а не его свойств. Грубо говоря, в Python всё — это ссылка на значение (см, например, этот комментарий: stackoverflow.com/questions/9696495/python-when-is-a-variable-passed-by-reference-and-when-by-value/9708861#9708861), и мы используем тот же (а не такой же) объект в случае, если Reused «переиспользуется».
Sign up to leave a comment.