Dav*_* D. 3 python django unit-testing factory factory-boy
假设您具有以下相关的Django模型:
class Service:
restaurant = models.ForeignKey(Restaurant)
hist_day_period = models.ForeignKey(DayPeriod)
class DayPeriod:
restaurant = models.ForeignKey(Restaurant)
Run Code Online (Sandbox Code Playgroud)
我想Service使用Factory 创建一个对象。它应该创建所有3个模型,但使用同一家餐厅。
使用此代码:
class ServiceFactory(factory.django.DjangoModelFactory):
class Meta:
model = Service
restaurant = factory.SubFactory('restaurants.factories.RestaurantFactory')
hist_day_period = factory.SubFactory(
'day_periods.factories.DayPeriodFactory', restaurant=restaurant)
Run Code Online (Sandbox Code Playgroud)
工厂男孩将创建2家不同的餐厅:
s1 = ServiceFactory.create()
s1.restaurant == s1.hist_day_period.restaurant
>>> False
Run Code Online (Sandbox Code Playgroud)
关于如何执行此操作的任何想法?我不清楚我是否应该使用related factors而不是SubFactory完成此操作。
您想使用factoryboy的父母和SelfAttribute
class ServiceFactory(factory.django.DjangoModelFactory):
class Meta:
model = Service
restaurant = factory.SubFactory('restaurants.factories.RestaurantFactory')
hist_day_period = factory.SubFactory(
'day_periods.factories.DayPeriodFactory',
restaurant=factory.SelfAttribute('..restaurant')
)
Run Code Online (Sandbox Code Playgroud)
有了这个测试应用程序,我得到了
In [1]: from service.tests import ServiceFactory
In [2]: s1 = ServiceFactory.create()
In [3]: s1.restaurant == s1.hist_day_period.restaurant
Out[3]: True
In [4]: s1.restaurant_id
Out[4]: 4
In [5]: s1.hist_day_period.restaurant_id
Out[5]: 4
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1625 次 |
| 最近记录: |