Комментарии 9
Вы удаляете объекты после каждого теста?
Используете ли фикстуры общие для группы тестов или всех тестов?
Используете ли фикстуры общие для группы тестов или всех тестов?
0
Нет, мы не удаляем данные после теста, так как потом их наличие облегчает разбор проблем. Мы просто сделали так, что все создаваемые данные независимы, и не влияют друг на друга и на поведение других тестов. Мы не используем фикстуры при генерации данных: в случае необходимости удаления — это было бы логично, а в нашем случае не имеет особого смысла. Мы просто вызываем Builder в начале каждого теста.
0
Python к сожалению не знаю, но технология подготовки тестовых данных очень интересная.
Насколько я понимаю конструкция Collection возвращает список свежесгенерированных объектов, а можно ли с помощью этой конструкции получить список (подмножество) кешированных объектов, например подмножество тегов из уже зарегистрированных в графе?
Насколько я понимаю конструкция Collection возвращает список свежесгенерированных объектов, а можно ли с помощью этой конструкции получить список (подмножество) кешированных объектов, например подмножество тегов из уже зарегистрированных в графе?
0
К сожалению, пока ReusedCollection нет… Но сделать то же самое можно через InstanceModifier.thatDoes(), передав туда метод, который походит по дереву и запихает в нужное поле вашего объекта коллекцию объектов, собранных из дерева по какому-то алгоритму.
0
Хочу уточнить — немного не понял, что со сгенерированными объектами дальше происходит?
Те как эти данные попадают в БД, чтобы потом на них тесты гонялись?
Те как эти данные попадают в БД, чтобы потом на них тесты гонялись?
0
Дальше вы сами пишете прослойку, которая сделает с этими объектами то, что вам надо. Например у нас есть 2 способа запихнуть эти объекты в систему: SqlAlchemy, чтобы смаршаллить объекты в базу и XMLRPC клиент, который дергает нужные методы системы, чтобы создать каждый объект из дерева. То есть мы легко можем, не изменяя процедуру генерации данных, по-разному создавать объекты в системе.
0
dchr, еще вопрос к вам.
В коде github.com/yandex-qatools/builders/blob/master/builders/tests/test_builder.py#L81
вы строите два экземпляра класса V и судя про проверке
предполагается, что объекты в свойстве «a» идентичны. Оно и понятно, ведь есть код:
Но не все так просто, так как также есть код:
который, мне как читателю говорит, что экземпляры U должны быть уникальными для v1 и v2, при этом как-то надо переиспользовать a и b в этом самом U.
Видимо я не понял политику Constructs Unique. Не могли бы вы пояснить этот момент, так как, я не уверен, что правильно понял предложение «Уникальный в том смысле, что даже если в нашем графе уже где-то есть объект типа typeToBuild, мы все равно сгенерим новый.» Под уникальностью Unique понимается не контент объекта, как в случае с Reused, а ссылка на память?
Сразу извинюсь, если сейчас чушь спрашиваю, может просто код неверно прочитал — про python навыков увы нет.
В коде 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 навыков увы нет.
0
Да, вы совершенно верно поняли, что, поскольку в классе 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 «переиспользуется».
В обоих случаях уникальность понимается именно в смысле идентичности конкретного объекта, а не его свойств. Грубо говоря, в Python всё — это ссылка на значение (см, например, этот комментарий: stackoverflow.com/questions/9696495/python-when-is-a-variable-passed-by-reference-and-when-by-value/9708861#9708861), и мы используем тот же (а не такой же) объект в случае, если Reused «переиспользуется».
0
Если кому то нужно быстро решить проблему генерации тестовых данных, рекомендую dbForge Data Generator for SQL Server или dbForge Data Generator for MySQL или dbForge Data Generator for Oracle в зависимости от используемой СУБД
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Тестирование в Яндексе: ObjectBuilders для описания и генерации синтетических тестовых данных