私はPythonテストには初めてです。私はpytestを使い、モックやパッチについて学び始めました。私は自分のメソッドの1つにテストケースを書きたいと思っています。私がテストしたいファイルのオープンとスロー例外の模倣
helper.py
def validate_json_specifications(path_to_data_folder, json_file_path, json_data) -> None:
""" Validates the json data with a schema file.
:param path_to_data_folder: Path to the root folder where all the JSON & schema files are located.
:param json_file_path: Path to the json file
:param json_data: Contents of the json file
:return: None
"""
schema_file_path = os.path.join(path_to_data_folder, "schema", os.path.basename(json_file_path))
resolver = RefResolver('file://' + schema_file_path, None)
with open(schema_file_path) as schema_data:
try:
Draft4Validator(json.load(schema_data), resolver=resolver).validate(json_data)
except ValidationError as e:
print('ValidationError: Failed to validate {}: {}'.format(os.path.basename(json_file_path), str(e)))
exit()
物事は以下のとおりです。
- Draft4Validatorクラスがインスタンス化されると、validateメソッドは
json_data
で呼び出されますか? ValidationError
がスローされ、exitが呼び出されますか?
ここまではテストケースを作成しようとしています。私はopen
メソッド& Draft4Validator
クラスにパッチを当てることにしました。
@patch('builtins.open', mock_open(read_data={}))
@patch('myproject.common.helper.jsonschema', Draft4Validator())
def test_validate_json_specifications(mock_file_open, draft_4_validator_mock):
validate_json_specifications('foo_path_to_data', 'foo_json_file_path', {})
mock_file_open.assert_called_with('foo_path_to_data/schema/foo_json_file_path')
draft_4_validator_mock.assert_called()
実際のデータを渡す代わりに、私のメソッドにいくつかの偽のデータとパスを渡したかったのです。どのように私は特別に2つの方法のためのパッチを作成する行くのですDraft4Validator
とどのように私はValidationError
例外をシミュレートします
@patch('myproject.common.helper.jsonschema', Draft4Validator())
E TypeError: __init__() missing 1 required positional argument: 'schema'
:私は、このエラーメッセージに
UPDATEを得ましたか。