2016-10-26 5 views
1

Ich habe eine Test-Datei wie folgt schreiben:Wo können Bibliotheken in Komponententests importiert werden? Python

import unittest 

from mylibrary import some_crazy_func 

class TestSomething(unittest.TestCase): 
    def test_some_crazy_func_that_needs_io_open(self): 
     # Opens file 
     # Calls function 
     # assert outputs 

Aber ich bin nicht sicher, wo die „pythonic Lage“, wo ich die Bibliothek importieren soll (sie io sagen).

Sollte es an der Spitze sein:

import io 
import unittest 

from mylibrary import some_crazy_func 

class TestSomething(unittest.TestCase): 
    def test_some_crazy_func_that_needs_io_open(self): 
     expected = ['abc', 'def', 'xyz'] 
     with io.open('somestaticfile.txt', 'r') as fin: 
      outputs = [some_crazy_func(line) for line in fin] 
     assert outputs == expected 

oder innerhalb der TestCase ‚s Funktion:

import unittest 

from mylibrary import some_crazy_func 

class TestSomething(unittest.TestCase): 
    def test_some_crazy_func_that_needs_io_open(self): 
     import io 
     expected = ['abc', 'def', 'xyz'] 
     with io.open('somestaticfile.txt', 'r') as fin: 
      outputs = [some_crazy_func(line) for line in fin] 
     assert outputs == expected 

Oder ist es vor der Testcase-Funktion und im Objekt Initialisierung:

import unittest 

from mylibrary import some_crazy_func 

class TestSomething(unittest.TestCase): 
    import io 
    def test_some_crazy_func_that_needs_io_open(self): 
     expected = ['abc', 'def', 'xyz'] 
     with io.open('somestaticfile.txt', 'r') as fin: 
      outputs = [some_crazy_func(line) for line in fin] 
     assert outputs == expected 
+0

Ich kann nicht sagen, das ist der beste Weg, aber ich fragte eine ähnliche Frage vor Jahren und das, wie ich ging für den Unit-Test importieren http://stackoverflow.com/questions/34689852/is-this- a-proper-way-to-test-stdout-mit-python-3-unittest – tsumnia

+0

Das heißt, wenn der Import von einem bestimmten Testfall abhängig ist, könnte importlib die Route sein, die Sie nehmen möchten – tsumnia

Antwort

0

Siehe PEP8: https://www.python.org/dev/peps/pep-0008/#id23

Darin heißt es,

Importe werden immer am Anfang der Datei gesetzt, kurz nach irgendwelchen Modul Kommentare und Docstrings und vor Modul Globals und Konstanten.

+0

Sogar in Unittests? Stellen Sie sich vor, wie geladen der 'sys.path' wäre, wenn der Test riesig ist. – alvas

+0

Ich habe mich immer über die Gründe für diese PEP8-Richtlinie gewundert. In Ihrem Beispiel sind Testmodule von Funktionsmodulen getrennt. Es spielt also keine Rolle, ob du es auf die Datei oder anderswo legst. –

Verwandte Themen