/ / Ako testovať jednotku pri otváraní súboru json? - python-3.x, testovanie jednotiek

Ako testovať funkciu jednotky otváraním súboru json? - python-3.x, testovanie jednotiek

Nasledujúca funkcia sa otvorí a načíta súbor Json. Moja otázka je, aký je najlepší prístup k jeho otestovaniu?

def read_file_data(filename, path):
os.chdir(path)
with open(filename,  encoding="utf8") as data_file:
json_data = json.load(data_file)
return json_data

filename a path sa odovzdávajú ako sys.argv.

Myslel som si, že na úvod budem potrebovať ukážkové dáta v testovacom prípade, ale nie som si istý, ako ich vlastne použijem na otestovanie funkcie

class TestMyFunctions(unittest.TestCase):
def test_read_file_data(self):
sample_json = {
"name" : "John",
"shares" : 100,
"price" : 1230.23
}

Každý ukazovateľ bude ocenený.

odpovede:

0 pre odpoveď č. 1

Myslím, že to, čo by ste chceli urobiť, by bolo vytvoriť súbor JSON, napevno vložiť do pamäte verziu tohto súboru JSON a presadiť medzi nimi rovnaké hodnoty.

Na základe vášho kódu:

class TestMyFunctions(unittest.TestCase):
def test_read_file_data(self):
import json
sample_json = {
"name" : "John",
"shares" : 100,
"price" : 1230.23
}
sample_json = json.dump(sample_json, ensure_ascii=False)
path = /path/to/file
filename = testcase.json
self.assertEqual(read_file_data(filename, path), sample_json)

0 pre odpoveď č. 2

Ako je uvedené vyššie, nemusíte znovu testovaťštandardný kód knižnice python funguje správne, takže vytvorením súboru s pevným kódom, ako je tiež uvedené, prekonávate bod jednotkového testu testovaním mimo jednotku kódu.

Namiesto toho by správnym prístupom bolo zosmiešnenie otvorenia súboru pomocou výsmechového rámca pythons. A tak otestujte, či vaša funkcia vracia JSON, ktorý je správne načítaný.

napr.

from unittest.mock import patch, mock_open
import json

class TestMyFunctions(unittest.TestCase):


@patch("builtins.open", new_callable=mock_open,
read_data=json.dumps({"name" : "John","shares" : 100,
"price" : 1230.23}))
def test_read_file_data(self):
expected_output = {
"name" : "John",
"shares" : 100,
"price" : 1230.23
}
filename = "example.json"
actual_output = read_file_data(filename, "example/path")

# Assert filename is file that is opened
mock_file.assert_called_with(filename)

self.assertEqual(expected_output, actual_output)