Skip to content

Gazelle considers both test_*.py and *_test.py files to be py_test targets. #1816

@dougthor42

Description

@dougthor42

🐞 bug report

Affected Rule

  • gazelle

Is this a regression?

Nope! Just unexpected behavior.

Description

A typical python project will use only one of *_test.py or test_*.py to name test files.

However, gazelle will make py_test targets for both types:

https://github.com/bazelbuild/rules_python/blob/e86252ffd6d1a1bf32ae99933acc5ab49b78ec1e/gazelle/python/generate.go#L116

https://github.com/bazelbuild/rules_python/blob/e86252ffd6d1a1bf32ae99933acc5ab49b78ec1e/gazelle/python/generate.go#L198

This can lead to unexpected behavior:

Example 1: unit test utilities

Assume that a project uses *_test.py for unit/integration tests. Using pytest, the config would be:

[tool.pytest.ini_options]
python_files = ["*_test.py"]

Also assume that there needs to be some utilities related to testing. A typical solution would be to make a test_utils.py file because that does not get collected by the pytest test runner.

gazelle will incorrectly (at least according to the user) make:

py_test(
    name = "test_utils",
    srcs = ["test_utils.py"],
)

The user expects a py_library instead.

Example 2: Non-code tests, such as electrical or physical testing

Code that deals with electrical or physical testing (voltage, current, vibration, pressure, etc) is typically called test_foo or foo_test. For example, code that determines the breakdown voltage of a part might be called test_breakdown_voltage.py. Code might also need to create collections or suites of non-code tests, and would live in test_suites.py.

Again, according to the user, gazelle will incorrectly make py_test targets for such instead of py_library targets.

🔬 Minimal Reproduction

  1. Make test_foo.py
  2. Make foo_test.py
  3. Run gazelle
  4. See that both were generated as py_test targets.

🔥 Exception or Error

N/A

🌍 Your Environment

Operating System:

  
$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux rodete
Release:        n/a
Codename:       rodete
  

Output of bazel version:

  
$ bazel version
Starting local Bazel server and connecting to it...
Build label: 7.1.0
Build target: @@//src/main/java/com/google/devtools/build/lib/bazel:BazelServer
Build time: Mon Mar 11 17:55:31 2024 (1710179731)
Build timestamp: 1710179731
Build timestamp as int: 1710179731
  

Rules_python version:

  
0.31.0 @ bdb2aa2e5c0ca435918037aa3568c0b0c4c9c1ab
  

Anything else relevant?

Don't think so.

Metadata

Metadata

Assignees

No one assigned

    Labels

    gazelleGazelle plugin related issues

    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