I am trying to test the raising of exceptions by a command implemented with the Click package.
This is my command:
@click.option(
'--bucket_name',
...)
@click.option(
'--group_id',
...)
@click.option(
'--artifact_id',
...)
@click.option(
'--version',
...)
@click.option(
'--artifact_dir',
required=False,
default='downloads/artifacts/',
...)
@click.command()
def download_artifacts(
bucket_name,
group_id, artifact_id, version,
artifact_dir
):
logger.info(
f"bucket_name: {bucket_name}, "
f"group_id: {group_id}, "
f"artifact_id: {artifact_id}, "
f"version: {version}, "
f"artifact_dir: {artifact_dir}, "
)
if not artifact_dir.endswith('/'):
raise ValueError(
"Enter artifact_dir ending with '/' ! artifact_dir: "
f"{artifact_dir}")
...
This is my test code with assertRaises that doesn't work:
def test_download_artifacts_invalid_dir(
self,
):
runner = CliRunner()
with self.assertRaises(ValueError):
result = runner.invoke(
download_artifacts,
'--bucket_name my_bucket \
--group_id gi \
--artifact_id ai \
--version 1.0.0 \
--artifact_dir artifact_dir'.split(),
input='5')
The assert fails and it gives E AssertionError: ValueError not raised instead.
I have found this way of testing, which passes, but it doesn't seem very elegant:
def test_download_artifacts_invalid_dir(
self,
):
runner = CliRunner()
result = runner.invoke(
download_artifacts,
'--bucket_name my_bucket \
--group_id gi \
--artifact_id ai \
--version 1.0.0 \
--artifact_dir artifact_dir'.split(),
input='5')
print(f"result.exception: {result.exception}")
assert "Enter artifact_dir ending" in str(result.exception)