在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)
通过这种设置,我们甚至为第三个不使用它的测试用例创建了汽车。有办法解决这个问题吗?