Я хочу написать unittest, который проверяет структуру файла JSON. Могу ли я написать фиктивный тест, который проверяет, что входные данные JSON содержат несколько вложенных словарей внутри? Это пример файла JSON:
{"Target_group_queries": {
"tvchview":{
"name":"tvview",
"description":"something",
"sql":"SELECT DISTINCT pnr, channel AS value FROM $source WHERE channel IN ( $channel )"
}}}
Unittest должен проверить, имеет ли вход «Target_group_queries» в качестве первого ключа, значение другого словаря и внутри другого словаря. Мне все равно, что внутри него, просто нужно вложить словарь, кроме "Target_group_queries". Нечто похожее на isinstance()
функцию, но с использованием утверждений или, если возможно, каким-то образом смоделировать ввод. Это то, что у меня есть:
def test_open_json_file(self):
import json
from unittest import mock
# test valid JSON
read_data = json.dumps({'Target_group_queries':{'tvview':{'name':'tvchview','description':'something','sql':'SELECT DISTINCT pnr, channel AS value FROM $source WHERE channel IN ( $channel )'}}})
mock_open = mock.mock_open(read_data=read_data)
with mock.patch('__builtin__.open', mock_open):
result = load_json()
self.assertEqual({'a': 1, 'b': 2, 'c': 3}, result)
# test invalid JSON
read_data = ''
mock_open = mock.mock_open(read_data=read_data)
with mock.patch("__builtin__.open", mock_open):
with self.assertRaises(ValueError) as context:
load_json()
self.assertEqual(
'filename is not valid JSON.', str(context.exception))
Я хочу, чтобы функция выглядела примерно так - тестирование неправильного ввода и тестирование правильного ввода. Есть идеи?