Skip to content

test: strict positional parameter enforcement is ignored under pytest #2755

@Capstan

Description

@Capstan

Environment details

  • OS type and version: Linux (gLinux / Debian based)
  • Python version: 3.13.12 (also affects all supported Python versions 3.10+)
  • pip version: 26.0.1
  • google-api-python-client version: 2.197.0 (at commit 6e471c075039dfef24e28d11658e03d5c949c7c3)

Steps to reproduce

  1. Check out the main branch of google-api-python-client.
  2. Set up a clean virtual environment and install test dependencies (pytest, mock, parameterized).
  3. Run the strict positional parameters enforcement test directly using pytest:
    pytest tests/test_discovery.py -k test_tests_should_be_run_with_strict_positional_enforcement

Code example

The bug lies in how strict argument enforcement is configured for the test suite in tests/__init__.py.

Historically, the enforcement was configured inside the nose-legacy setup_package() hook:

# tests/__init__.py
from googleapiclient import _helpers as util

def setup_package():
    """Run on testing package."""
    util.positional_parameters_enforcement = "EXCEPTION"

Because modern test runs in this repository (including via nox sessions) run under pytest, the setup_package() package-level hook is ignored. As a result, the tests run in warning-only mode, causing strict parameter assertion tests to be bypassed and fail with an AssertionError instead of raising TypeError.

Since the repository has migrated to pytest, this legacy hook is dead code. We should configure the variable directly at the package module level and completely remove the unused setup_package hook:

# tests/__init__.py
from googleapiclient import _helpers as util

+util.positional_parameters_enforcement = "EXCEPTION"
-
-def setup_package():
-    """Run on testing package."""
-    util.positional_parameters_enforcement = "EXCEPTION"

Stack trace

When running the tests using pytest, the test fails with the following output:

=================================== FAILURES ===================================
_ DiscoveryErrors.test_tests_should_be_run_with_strict_positional_enforcement __

self = <tests.test_discovery.DiscoveryErrors testMethod=test_tests_should_be_run_with_strict_positional_enforcement>

    def test_tests_should_be_run_with_strict_positional_enforcement(self):
        try:
            plus = build("plus", "v1", None, static_discovery=False)
>           self.fail("should have raised a TypeError exception over missing http=.")
E           AssertionError: should have raised a TypeError exception over missing http=.

tests/test_discovery.py:509: AssertionError
------------------------------ Captured log call -------------------------------
WARNING  googleapiclient._helpers:_helpers.py:129 build() takes at most 2 positional arguments (3 given)
=========================== short test summary info ============================
FAILED tests/test_discovery.py::DiscoveryErrors::test_tests_should_be_run_with_strict_positional_enforcement
====================== 1 failed, 332 deselected in 1.65s =======================

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions