Fixture
Encapsulates one or more datasets to be loaded into a storage medium.
The Fixture class is accessible via the testtools.fixtures module.
Most likely you will only use one of the wrapper classes designed for dealing with a specific storage medium.
before looking at how you load data and work with it, here is how fixtures are designed to work inside a test case:
>>> from testtools.testself.myfixtures import EmployeeData >>> class TestTPSCoverSheet: ... def setUp(self): ... self.fxt = EmployeeData() ... def tearDown(self): ... self.fxt.clean() >>>
now for the more low level examples ...
Example with CsvFixture
>>> from testtools.fixtures import CsvFixture
>>> class Products(CsvFixture):
... class meta:
... data = ( ('product_on_sale', {'name':'toy truck', 'on_sale':True}), )
>>> fxt = Products(filename='/tmp/product.csv', fields=['name','on_sale'] ) # csv field headers
>>> fxt.product_on_sale
Fixture.Values(**{'on_sale': True, 'name': 'toy truck'})
Defining data
Data is an iterable of tuples where each row unpacks to a context key and dictionary of values. The context key becomes an attribute and/or dictionary key in the fixture object.
For example:
>>> # NOTE: the trailing comma here forces the type into a tuple :
>>> fxt.load( (('reversible_slacks_on_sale', {'name': 'slacks, reversible', 'on_sale': True}),) )
>>> fxt.reversible_slacks_on_sale
Fixture.Values(**{'on_sale': True, 'name': 'slacks, reversible'})
A fixture's data can also be set in the following ways, respectively :
From the data keyword :
>>> from testtools.testself.model import Employee
>>> from testtools.fixtures import SOFixture
>>> fxt = SOFixture(data=(('bob', {'name':'bob','hair_color':'black'}),), so_class=Employee)
>>> fxt.bob
Fixture.Values(**{'name': 'bob', 'hair_color': 'black'})
from meta.data :
>>> # here the SQLObject "Employee" is pulled out from meta.env
>>> # because it matches the class name employee
>>> from testtools.testself import model
>>> class Employee(SOFixture):
... class meta:
... env = model
... data = (('jane', {'name':'jane','hair_color':'brown'}),)
>>> fxt = Employee()
>>> fxt.jane
Fixture.Values(**{'name': 'jane', 'hair_color': 'brown'})
... or by defining a data() method :
>>> # or you can set meta.so_class to the specific SQLObject
>>> class JaneEmployee(SOFixture):
... class meta:
... so_class = model.Employee
... def data(self):
... return (('jane', {'name':'jane','hair_color':'brown'}),)
>>> fxt = JaneEmployee()
>>> fxt.jane
Fixture.Values(**{'name': 'jane', 'hair_color': 'brown'})
Methods
See the source for more information.