2014-09-30 14 views
8

Bazı fikstür girişleriyle (gerektiği gibi) başarısız olan, ağır şekilde sabitlenmiş bir test fonksiyonum var. Bunu nasıl belirleyebilirim? Şu an yapıyorum, belki daha iyi bir yol var. Ben py.test için oldukça yeni, bu yüzden herhangi bir ipucu için teşekkür ederim.Pytest'te, belirli fikstürler nasıl atlanır veya xfail verilir?

Sonraki parça, tüm giriş armatürleri. Bilginize, example_datapackage_pathconf.test

@pytest.fixture(params=[None, 'pooled_col', 'phenotype_col']) 
def metadata_key(self, request): 
    return request.param 

@pytest.fixture(params=[None, 'feature_rename_col']) 
def expression_key(self, request): 
    return request.param 

@pytest.fixture(params=[None, 'feature_rename_col']) 
def splicing_key(self, request): 
    return request.param 

@pytest.fixture 
def datapackage(self, example_datapackage_path, metadata_key, 
       expression_key, splicing_key): 
    with open(example_datapackage_path) as f: 
     datapackage = json.load(f) 
    datatype_to_key = {'metadata': metadata_key, 
         'expression': expression_key, 
         'splicing': splicing_key} 
    for datatype, key in datatype_to_key.iteritems(): 
     if key is not None: 
      resource = name_to_resource(datapackage, datatype) 
      if key in resource: 
       resource.pop(key) 
    return datapackage 

@pytest.fixture 
def datapackage_dir(self, example_datapackage_path): 
    return os.path.dirname(example_datapackage_path) 

tanımlanır Ve burada bir test kendisidir.

def test_from_datapackage(self, datapackage, datapackage_dir): 
    import flotilla 
    from flotilla.external import get_resource_from_name 

    study = flotilla.Study.from_datapackage(datapackage, datapackage_dir, 
              load_species_data=False) 

    metadata_resource = get_resource_from_name(datapackage, 'metadata') 
    expression_resource = get_resource_from_name(datapackage, 
               'expression') 
    splicing_resource = get_resource_from_name(datapackage, 'splicing') 

    phenotype_col = 'phenotype' if 'phenotype_col' \ 
     not in metadata_resource else metadata_resource['phenotype_col'] 
    pooled_col = None if 'pooled_col' not in metadata_resource else \ 
     metadata_resource['pooled_col'] 
    expression_feature_rename_col = 'gene_name' if \ 
     'feature_rename_col' not in expression_resource \ 
     else expression_resource['feature_rename_col'] 
    splicing_feature_rename_col = 'gene_name' if \ 
     'feature_rename_col' not in splicing_resource \ 
     else splicing_resource['feature_rename_col'] 

    assert study.metadata.phenotype_col == phenotype_col 
    assert study.metadata.pooled_col == pooled_col 
    assert study.expression.feature_rename_col \ 
      == expression_feature_rename_col 
    assert study.splicing.feature_rename_col == splicing_feature_rename_col 

metadata_key içindedir Ne yapmak istiyorsunuz, parametre, pooled_col veya phenotype_col olduğunda başarısız olacağını söylüyor. Ben pytest: Skip and xfail: dealing with tests that can not succeed baktım, ama sadece parametrik test, ama fikstür değil, sadece skip ve xfail konuştuk. here açıklandığı şekilde datapackage veya expression_key armatürleri ise

cevap

15

Eğer pytest.xfail ve pytest.skip kullanabilirsiniz. Örneğin:

@pytest.fixture 
def datapackage(self, example_datapackage_path, metadata_key, 
       expression_key, splicing_key): 
    if metadata_key == 'pooled_col': 
     pytest.skip('metadata key is "pooled_col"') 
    ... 

Ayrıca bu örnekte olduğu gibi fikstürü parametrelerinde pytest.mark.xfail kullanabilirsiniz:

@pytest.fixture(params=['a', pytest.mark.xfail('b'), 'c']) 
def fx1(request): 
    return request.param 


def test_spam(fx1): 
    assert fx1 

İsterseniz bu iş gibi görünüyor bu testleri atlamak:

@pytest.fixture(
    params=['a', pytest.mark.skipif(True, reason='reason')('b'), 'c']) 
def fx1(request): 
    return request.param 


def test_spam(fx1): 
    assert fx1 
+0

Oh, Güzel! "Pytest.fixture" için aynı argümanları "pytest.mark.parameterize" olarak kullanabileceğinizi anlayamadım. Teşekkür ederim! –

İlgili konular