2017-06-19 77 views
0

我正在使用pytest並想測試一個函數將某些內容寫入文件。所以,我有writer.py其中包括:使用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創建並擁有正確的內容:

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-context-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-模擬python框架),所以你從來沒有真正打開過一個文件,但只是檢查它是否被正確使用。 –

+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'