[Python] Testing argument using Python Click

Discussão em 'Python' iniciado por Stack, Abril 25, 2025.

  1. Stack

    Stack Membro Participativo

    I have a command-line script with Python-click with an argument and option:

    # console.py
    import click

    @click.command()
    @click.version_option()
    @click.argument("filepath", type=click.Path(exists=True), default=".")
    @click.option(
    "-m",
    "--max-size",
    type=int,
    help="Max size in megabytes.",
    default=20,
    show_default=True,
    )
    def main(filepath: str, max_size: int) -> None:
    max_size_bytes = max_size * 1024 * 1024 # convert to MB
    if filepath.endswith(".pdf"):
    print("success")
    else:
    print(max_size_bytes)


    Both the argument and option have default values and work on the command-line and using the CLI it behaves as expected. But when I try testing it following Click documentation and debug it, it does not enter the first line:

    # test_console.py
    from unittest.mock import Mock

    import click.testing
    import pytest
    from pytest_mock import MockFixture

    from pdf_split_tool import console

    @pytest.fixture
    def runner() -> click.testing.CliRunner:
    """Fixture for invoking command-line interfaces."""
    return click.testing.CliRunner()

    @pytest.fixture
    def mock_pdf_splitter_pdfsplitter(mocker: MockFixture) -> Mock:
    """Fixture for mocking pdf_splitter.PdfSplitter."""
    return mocker.patch("pdf_split_tool.pdf_splitter.PdfSplitter", autospec=True)

    def test_main_uses_specified_filepath(
    runner: click.testing.CliRunner,
    mock_pdf_splitter_pdfsplitter: Mock,
    ) -> None:
    """It uses the specified filepath."""
    result = runner.invoke(console.main, ["test.pdf"])
    assert result.exit_code == 0


    I couldn't see why it is giving since the debugger did not enter the first line of function main(). Any ideas of what could be wrong?

    Continue reading...

Compartilhe esta Página