2017-06-19 1 views
0

J'utilise pytest et je veux tester qu'une fonction écrit du contenu dans un fichier. J'ai donc writer.py qui comprend:En utilisant pytest pour m'assurer qu'un fichier est créé et écrit en

MY_DIR = '/my/path/' 

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

Je veux tester /my/path/myfile.txt est créé et a le contenu correct:

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' 

Mais je suis coincé avec la façon de le faire. Tout ce que j'essaie, comme quelque chose comme:

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

qui me génère des erreurs conduisent à penser que je ne suis pas comprendre ou à utiliser tmpdir correctement.

Comment dois-je tester cela? (Si le reste de la façon dont j'utilise pytest est aussi horrible, n'hésitez pas à me le dire aussi!)

+1

Il y a deux questions qui traitent chaque partie de ce que vous éprouvez des difficultés, je crois. Vérifiez-les et voyez si elles fournissent un aperçu. En voici une en test pour écrire dans le fichier [ici] (https://stackoverflow.com/questions/20531072/writing-a-pytest-function-to-check-outputting-to-a-file-in-python) et [ici] (https://stackoverflow.com/questions/15801662/py-test-how-to-use-a-context-manager-in-a-funcarg-fixture) est celui qui montre comment utiliser le bon montage pour faire face à des gestionnaires de contexte. – idjaw

+0

Vous devriez [simulez 'open()'] (https://stackoverflow.com/questions/1289894/how-do-i-mock-an-open-used-in-a-with-statement-using-the- mock-framework-in-pyth) donc vous n'ouvrez jamais un fichier, mais vérifiez simplement s'il a été correctement utilisé. –

+0

Pouvons-nous voir plus de détails? Comment générez-vous tmpdir? Quelles sont les erreurs? – phd

Répondre

0

J'ai un test pour travailler en modifiant la fonction que je teste afin qu'elle accepte un chemin écrire à. Cela rend plus facile à tester. Alors writer.py est:

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)) 

Et le test:

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'