googleapis / googleapis/google-api-python-client

test: strict positional parameter enforcement is ignored under pytest

Offen
#2,755 0 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen
Vorherrschende Sprache
Python
Sterne
8.9k
Forks
2.6k
Ø Merge
2 T. 28 Min.
Gemergte PRs (30 T.)
17

Beschreibung

#### 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`:
```bash
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:
```python
# 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:

```diff
# 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 =

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 =======================
```

Beitragsleitfaden

Beitragsleitfaden öffnen

Bewertung

Dieses Issue wurde noch nicht bewertet.

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.