2016-04-02 11 views
3

私はpy.testをテストに使用します。py.testのtmpdir 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 

私は​​を使用することはできませんが。

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 

をしかし、私は固定具にスコープを使用することはできません。あなたが処理するためにtempfileモジュールを使用することができます

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

答えて

-2

一時的なファイルとディレクトリがあります。セットアップでは、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

あなたは@santonが提案されているよう@pytest.fixture(autouse=True)を使用する必要はありませんが、(あなたがUPDの一部で書くように)あなたがTestMyClass外フィクスチャを作成したい場合あなたは固定具に何かを返すようにしたくない場合は

@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 
関連する問題