googleapis / googleapis/google-api-python-client
test: strict positional parameter enforcement is ignored under pytest
- Lingua principale
- Python
- Stelle
- 8.9k
- Fork
- 2.6k
- Merge medio
- 2g 28m
- PR unite (30g)
- 17
Descrizione
#### 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 =======================
```
Guida per i contributori
Apri la guida per i contributori
Valutazione
Questa issue non è ancora stata valutata.