은 이제 나는 다음과 같은 간단한 고정 있다고 가정 해 봅시다 (사용 pytest-장고를,하지만 난 그것뿐만 아니라 pytest 적용해야한다고 생각) :여러 복사본
@pytest.fixture
def my_thing(request, db):
thing = MyModel.objects.create()
request.addfinalizer(lambda: thing.delete())
return thing
이 때 좋은 작품 내 테스트에는 MyModel의 단일 인스턴스가 필요합니다. 그러나 두 개 (또는 세 개 또는 네 개)가 필요한 경우는 어떨까요? 나는 각 인스턴스가 구별 되길 원하지만 같은 방식으로 설정되기를 바란다.
코드를 복사/붙여 넣기하고 조명기 기능의 이름을 바꿀 수는 있지만 그다지 좋지 않습니다.
마찬가지로, 나는 시도했다 :
@pytest.fixture
def my_thing_1(my_thing):
return my_thing
@pytest.fixture
def my_thing_2(my_thing):
return my_thing
그러나이 나타납니다 각각 MyModel의 동일한 인스턴스를 반환 할 수 있습니다.
pytest의 기본 기능을 사용하여 원하는 것을 할 수 있습니까? 대안으로, 나는 너무 많은 코드를 복제하지 않기 위해 도우미 함수의 셋업/분해를 헬퍼 함수로 옮길 수있다.
아니면이 모든 일을 잘못된 방식으로 진행하고 있습니까?
1) 종료 자에 람다를 필요로하지에 좋은 전화를받을. 2) 나는 당신의 접근 방식을 좋아합니다. 저는 실제로 Factory Boy를 사용하여이 모델들을 제작하고 있습니다. 그래서 나는 각 모델에 대한 공장 치구를 만들 필요조차 없다고 생각합니다. 하지만 SubFactory에 finalizer를 재귀 적으로 추가하기 위해 ModelFactory를 서브 클래 싱하는 데 문제가있어 문제 해결의 길잡이로 활용할 것입니다. 감사! –
나중에 finalizer를 사용하는 유일한 이유는 pytest-django가 여러 데이터베이스를 지원하지 않기 때문에 테스트 사이에 데이터베이스를 정리하지 않았기 때문입니다 (https://github.com/pelme/pytest_django/issues/ 참조). 76). 위에서 설명한 유형의 문제에 대해서는 전적으로 FactoryBoy를 pytest-django와 함께 사용하는 것이 좋습니다. –