googleapis / googleapis/google-api-python-client

test: strict positional parameter enforcement is ignored under pytest

Abierto
#2,755 0 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Python
Estrellas
8.9k
Forks
2.6k
Merge medio
2 d 28 min
PR fusionados (30 d)
17

Descripción

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

Guía de contribución

Abrir la guía de contribución

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.