저는 Python 테스트를 처음 사용합니다. 나는 pytest를 사용 중이며 mock 및 패치에 대해 배우기 시작했습니다. 내 방법 중 하나에 대한 테스트 사례를 작성하려고합니다.파일 열기 및 예외 예외 처리
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
이 던져졌으며 종료가 호출됩니까?
여기에 테스트 사례를 작성하려는 시도가 있습니다. 나는 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()
실제 데이터를 전달하는 대신 가짜 데이터와 경로를 내 메서드에 전달하려고합니다.
@patch('myproject.common.helper.jsonschema', Draft4Validator())
E TypeError: __init__() missing 1 required positional argument: 'schema'
가 어떻게이 방법 특별히 Draft4Validator
및 방법에 대한 패치를 만들어 가야합니까 내가 ValidationError
예외를 시뮬레이션 할 : 나는
는 UPDATE이 오류 메시지
있어?