2017-06-19 8 views
0

私はpytestを使用していて、関数がファイルに何らかのコンテンツを書き込むことをテストしたいと考えています。pytestを使ってファイルを作成して確実に作成する

MY_DIR = '/my/path/' 

def my_function(): 
    with open('{}myfile.txt'.format(MY_DIR), 'w+') as file: 
     file.write('Hello') 
     file.close() 

は、私が作成され/my/path/myfile.txtをテストしたいと正しい内容があります:だから私は、どのwriter.pyを持って

import writer 

class TestFile(object): 

    def setup_method(self, tmpdir): 
     self.orig_my_dir = writer.MY_DIR 
     writer.MY_DIR = tmpdir 

    def teardown_method(self): 
     writer.MY_DIR = self.orig_my_dir 

    def test_my_function(self): 
     writer.my_function() 

     # Test the file is created and contains 'Hello' 

をしかし、私はこれを行う方法とこだわっています。などのようなものとして、私がしようすべてを、:

 import os 
     assert os.path.isfile('{}myfile.txt'.format(writer.MYDIR)) 

は、私が理解するか、正しくtmpdirを使用していない疑いがあるように私につながるエラーを生成します。

これはどのようにテストする必要がありますか? (もし私がpytestを使っている方法の残りの部分がひどいとしたら、それも私に教えてください)

+1

あなたは、私は信じて困難を抱えているものの各部分に取り組む二つの質問があります。それらをチェックし、彼らが何らかの洞察を提供するかどうかを見てください。ここにはファイル[ここ](https://stackoverflow.com/questions/20531072/writing-a-pytest-function-to-check-outputting-to-a-file-in-python)への書き込みテストがあります。 [ここ](https://stackoverflow.com/questions/15801662/py-test-how-to-use-a-content-manager-in-a-funcarg-fixture)は、正しいコンテキストマネージャに対処するためのフィクスチャ。 – idjaw

+0

あなたは[模倣する 'open()'](https://stackoverflow.com/questions/1289894/how-do-i-mock-an-open-used-in-a-with-statement-using-the- mock-framework-in-pyth)ので、実際にファイルを開くことはありませんが、正しく使用されているかどうかを確認するだけです。 –

+0

詳細を表示できますか?どのようにtmpdirを生成するのですか?エラーとは何ですか? – phd

答えて

0

私がテストしている関数を変更してテストして、パスを受け入れるようにしましたに書き込む。これにより、テストが容易になります。だから、writer.pyは次のとおりです。

MY_DIR = '/my/path/' 

def my_function(my_path): 
    # This currently assumes the path to the file exists. 
    with open(my_path, 'w+') as file: 
     file.write('Hello') 

my_function(my_path='{}myfile.txt'.format(MY_DIR)) 

とテスト:

import writer 

class TestFile(object): 

    def test_my_function(self, tmpdir): 

     test_path = tmpdir.join('/a/path/testfile.txt') 

     writer.my_function(my_path=test_path) 

     assert test_path.read() == 'Hello' 
関連する問題