2016-04-02 4 views
3

Я использую py.test для тестирования.tmpdir in py.test setup_class

В setup_class() мне нужно использовать TmpDir для моего конструктора класса:

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

    def test_test(self): 
     assert True 

И у меня есть ошибка:

NameError: name 'tmpdir' is not defined 

Я не могу использовать setup_class(self, tmpdir).

Если я использую этот код:

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

Это работа, но мне нужно TMPDIR в моем конструктор класса.

Как это сделать?

Спасибо!

UPD

Я пытаюсь сделать это:

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

class TestMyClass: 

    def test_test(self, constructor): 
     pass 

Но я не могу использовать в области действия прибора:

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

ответ

-2

Вы можете использовать tempfile модуль для обработки с временными файлами и каталогами. В настройке вы можете создать temp dir с mkdtemp и удалить его на tearDown из тестового класса.

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, но вопрос о ** py.test ** – tim

2

Я делаю это:

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

Если вы не хотите использовать @pytest.fixture(autouse=True), как @santon предложил, но вы хотите создать прибор вне TestMyClass (как вы пишете в части UPD) , вы можете попробовать это:

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

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

Если вы не хотите ничего возвращать в приспособлении, но, например, перейти на временную директорию, вы можете сделать:

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

@pytest.mark.usefixtures("t")                
class TestMyClass: 
    def test_test(self): 
     assert True 
Смежные вопросы