В RSpec вы можете лениво устанавливать переменные, используя вспомогательный метод Memoized.Синтаксис называется let block .Выглядит это так:
describe "trucks" do
let(:truck) { create(:truck) }
let(:car) { create(:car) }
it "has the same number of wheels as cars" do
expect(car.wheels).to eq(truck.wheels)
end
it "has the same fuel type as cars" do
expect(car.fuel_type).to eq(truck.fuel_type)
end
it "has power steering" do
expect(truck.power_steering).to eq(true)
end
end
Что приятно, так это то, что я автоматически создаю автомобиль только для примеров, в которых я использую автомобиль, потому что он лениво оценивается.
Мне бы хотелосьсделать то же самое в Python.На данный момент я знаю, что я могу поделиться настройкой между тестами только с помощью блока настройки.Это выполняется для всех примеров в группе.
class TrucksTestCase(TestCase):
def setup(self):
self.truck = TruckFactory()
self.car = CarFactory()
def test_has_same_number_of_wheels_as_cars(self):
self.assertEqual(self.car.wheels, self.truck.wheels)
def test_has_same_fuel_type_as_cars(self):
self.assertEqual(self.car.fuel_type, self.truck.fuel_type)
def test_has_power_steering(self):
self.assertTrue(self.truck.power_steering)
При этой настройке мы создаем автомобиль даже для третьего контрольного примера, который его не использует.Есть ли способ обойти это?