googleapis / googleapis/google-api-python-client

test: strict positional parameter enforcement is ignored under pytest

Đang mở
#2,755 0 bình luận 0 reaction 0 người được giao Xem trên GitHub
Ngôn ngữ chính
Python
Star
8.9k
Fork
2.6k
Merge trung bình
2 ngày 28 phút
Pull request đã merge (30 ngày)
17

Mô tả

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

Hướng dẫn đóng góp

Mở hướng dẫn đóng góp

Đánh giá

Issue này chưa được đánh giá.

Nhận issue mới trong hộp thư của bạn

Bản tóm tắt ngắn những issue GitHub phù hợp với người mới.