Ich schreibe einen Komponententest für eine Funktion in meinem Skript, aber ich habe Probleme beim Erstellen einer Mock-Datei. Meine Funktion nimmt einen Dateinamen und Ausgabe ist es MD5-Wert.Python: Mocking eine Datei für UnitTesting
def md5(file_name):
#Function to return the md5 value of a file
hash_md5 = hashlib.md5()
with open(fname, "rb") as f:
for chunk in iter(lambda: f.read(4096), b""):
hash_md5.update(chunk)
return hash_md5.hexdigest()
Mein Unittest zur Zeit:
import mock
class Function_to_test_TestCase(unittest.TestCase):
def test_filename(self):
with mock.patch('__main__.open', mock.mock_open(read_data=''), create=True) as m:
md5_value=my_script.function_to_get_md5_value(m)
Jedoch habe ich den Fehler:
with open(fname, "rb") as f:
TypeError: coercing to Unicode: need string or buffer, MagicMock found
ist dieser Weg der richtige Weg, ein Mock-Datei mit einem ähnlichen Mock md5 Wert zu machen ? Jeder Rat wird geschätzt!
Können Sie erklären, wo Funktion my_script.function_to_get_md5_value (m) ? Wenn dies Ihre MD5-Funktion ist, warum nennen Sie es mit Mock-Argument anstelle von Dateiname? –
@AndreyBelyak Hallo, es ist eine Funktion in einem breiteren Skript, das ein Verzeichnis von Dateien scannt und eine Manifest-Datei erzeugt, die jeden Dateinamen und jeden md5-Wert enthält. Ich bin gerade dabei, Komponententests für jede Funktion in meinem Skript zu erstellen, ich habe mich nur gefragt, ob es eine Möglichkeit gibt, eine einfache Datei in einem Unittest-Szenario zu erstellen, um meine Funktion – Catherine
zu testen. Ich denke, dass der einfachste Weg ist, real zu verwenden Datei mit Beispieldaten. Sie können es in Ihren Testordner einfügen und zu VCS hinzufügen. –