2016-06-03 6 views
1

모든 py.test 클래스 메소드에서 공통 데이터를 사용하고 싶습니다. 내가 훨씬 더 3보다가 (py.test 클래스에서 변수 당 하나의 조명기를 만드는 대안이 있습니까?

class TestDatasplit: 

    @pytest.fixture() 
    def n_files(self): 
     return 1000 

    @pytest.fixture() 
    def n_classes(self): 
     return 10 

    @pytest.fixture() 
    def n_files_per_class(self, n_files, n_classes): 
     return int(n_files/n_classes) 

    def test_datasplit_1(self, n_files): 
     assert n_files == 1000 

    def test_datasplit(self, n_files_per_class): 
     assert n_files_per_class == 100 

을하지만, 여기에 내 모든 변수에 대한 고정을 만들 필요가 있지만, 아주 자세한 것 같다

n_files = 1000 
n_classes = 10 
n_file_per_class = int(n_files/n_classes) 

가 나는기구, 예를 사용할 수 있다는 것을 발견 변수) ...

py.test 클래스에서 많은 공유 변수를 만드는 가장 좋은 방법은 무엇입니까?

+0

이 테스트는'unittest.TestCase'에서 파생되지 않은 클래스로 래핑 된 경우'py.test'에 의해 발견됩니까? –

답변

0

@ das-g의 설명에 동의하지만 조명기를 사용하려면 맞춤 클래스를 기반으로 객체를 반환하는 조명기를 사용할 수 있습니다. a namedtuple.

+0

그게 내가 다른 옵션이 없다면 결국 끝날거야. – jul

0

테스트에서이 값이 변경되지 않는 것 같아 모듈 수준 또는 클래스 수준의 상수를 사용할 수 있습니다. Pytest fixtures는 각 테스트에 값의 개별 사본을 제공하여 하나 이상의 테스트가 값을 변경시킬 때 테스트가 서로 의존하기 시작하지 않도록합니다 (또는 실수로 서로 실패하게 만듭니다).

+0

테스트 결과 값이 변하는 경우 어떻게해야합니까? – jul

+0

테스트에서 값을 변경하면 조명기를 사용하여 각 테스트가 다른 테스트에서 수정 된 값 대신 원본 값의 새 복사본을 얻습니다. 테스트가 다른 테스트의 수정 사항에 의존하는 경우 테스트 접근 방식을 실제로 다시 생각해보십시오. –