2016-04-02 25 views
3

Test için py.test kullanıyorum.tmpdir py.test kurulum_class

setup_class() Benim sınıf yapıcısı için TMPDIR kullanmak gerekir yılında

:

class TestMyClass: 
    def setup_class(self): 
     self.t = MyClass(path=tmpdir) 

    def test_test(self): 
     assert True 

Ve bir hata var:

NameError: name 'tmpdir' is not defined 

Ben setup_class(self, tmpdir) kullanamazsınız.

def test_needsfiles(tmpdir): 
    print(tmpdir) 
    assert 0 

Bu işi ama benim sınıf yapıcısı TMPDIR gerekir: Bu kodu kullanırsanız

.

Bu nasıl yapılır?

Teşekkürler!

UPD

Bunu deneyin:

@pytest.yield_fixture() 
def constructor(tmpdir): 
    _t = MyClass(path=str(tmpdir)) 
    yield _t 

class TestMyClass: 

    def test_test(self, constructor): 
     pass 

Ama fikstür kapsamları kullanamazsınız: Sen işlemek için tempfile modülünü kullanabilirsiniz

ScopeMismatch: You tried to access the 'function' scoped fixture 'tmpdir' with a 'module' scoped request object, involved factories

cevap

-2

geçici dosyalar ve direkler ile. Kurulumda, mkdtemp ile temp dir'i oluşturabilir ve test sınıfından tearDown'dan silebilirsiniz.

import shutil, tempfile 
import unittest 

class TestMyClass(unittest.TestCase): 
    def setUp(self): 
     self.tmp_dir = tempfile.mkdtemp() 

    def tearDown(self): 
     shutil.rmtree(self.tmp_dir) 
+0

thx, ancak soru hakkında ** py.test ** – tim

2

Bunu yapmak:

class TestMyClass: 
    @pytest.fixture(autouse=True) 
    def setup(self, tmpdir): 
     self.tmpdir = tmpdir.strpath 
0

Eğer @santon önerdiği gibi @pytest.fixture(autouse=True) kullanmak istemiyorum ama (sen UPD kısmen yazma gibi) TestMyClass dışındaki bir fikstür oluşturmak istiyorsanız , bunu deneyebilirsiniz: bir fikstür şey dönmek istemiyorsanız

@pytest.fixture 
def t(tmpdir): 
    return MyClass(tmpdir) 

class TestMyClass: 
    def test_test(self, t): 
     assert True 

, ancak örneğin geçici bir dizine gidin, ayrıca yapabilirsiniz:

@pytest.fixture 
def t(tmpdir): 
    os.chdir(str(tmpdir)) 

@pytest.mark.usefixtures("t")                
class TestMyClass: 
    def test_test(self): 
     assert True 
İlgili konular