Skip to content

[SPARK-56861][PS][TESTS] Fix ArrowInterfaceTests being silently skipped by unittest#55870

Closed
zhengruifeng wants to merge 1 commit into
apache:masterfrom
zhengruifeng:SPARK-arrow-interface-tests
Closed

[SPARK-56861][PS][TESTS] Fix ArrowInterfaceTests being silently skipped by unittest#55870
zhengruifeng wants to merge 1 commit into
apache:masterfrom
zhengruifeng:SPARK-arrow-interface-tests

Conversation

@zhengruifeng
Copy link
Copy Markdown
Contributor

What changes were proposed in this pull request?

Fix the base class of ArrowInterfaceTests in python/pyspark/pandas/tests/test_arrow_interface.py so the test is actually discovered by unittest.

The class was declared as:

class ArrowInterfaceTests(ArrowInterfaceTestsMixin, SQLTestUtils):
    pass

SQLTestUtils is a plain mixin that does not extend unittest.TestCase, so this class itself is not a TestCase subclass and unittest's discovery (TestLoader.loadTestsFromModule) silently skips it.

Verified with loader.loadTestsFromModule(...).countTestCases():

tests collected issubclass(TestCase)
Before fix 0 False
After fix 3 True

The sibling Spark Connect parity test ArrowInterfaceParityTests in tests/connect/test_parity_arrow_interface.py extends ReusedConnectTestCase (which does chain to TestCase) and so was unaffected, masking the issue.

Fix: switch the base to PandasOnSparkTestCase, matching the other pyspark.pandas.tests.test_* classes (e.g. NamespaceTests, UtilsTests, InternalFrameTests, SQLTests). PandasOnSparkTestCase chains through ReusedSQLTestCase -> ReusedPySparkTestCase -> PySparkBaseTestCase -> unittest.TestCase.

Why are the changes needed?

test_spark_arrow_c_streamer_arrow_consumer (added in SPARK-55124) has not actually been running in CI since it was introduced; it is a latent gap in coverage of the pandas-on-Spark Arrow C-stream interface.

Does this PR introduce any user-facing change?

No. Test-only change.

How was this patch tested?

  • Discovery check (above): unittest.TestLoader.loadTestsFromModule now collects the test.
  • Ran the test locally:
$ python -m unittest -v pyspark.pandas.tests.test_arrow_interface
test_assert_classic_mode (...ArrowInterfaceTests) ... ok
test_spark_arrow_c_streamer_arrow_consumer (...ArrowInterfaceTests) ... ok
test_assert_classic_mode (...PandasOnSparkTestCase) ... ok
----------------------------------------------------------------------
Ran 3 tests in 10.683s
OK

Was this patch authored or co-authored using generative AI tooling?

Generated-by: Claude opus-4-7

`ArrowInterfaceTests` was declared as

    class ArrowInterfaceTests(ArrowInterfaceTestsMixin, SQLTestUtils):
        pass

`SQLTestUtils` is a plain mixin that does not extend `unittest.TestCase`, so the class itself is not a `TestCase` subclass and `unittest`'s discovery (`TestLoader.loadTestsFromModule`) silently skips it. Verified with `loader.loadTestsFromModule(...).countTestCases()`:

- Before: 0
- After:  3 (including `test_spark_arrow_c_streamer_arrow_consumer`)

The sibling Spark Connect parity test (`ArrowInterfaceParityTests`) extends `ReusedConnectTestCase` and so was unaffected, which masked the issue.

Fix by switching the base to `PandasOnSparkTestCase`, matching the other `pyspark.pandas.tests.test_*` classes (e.g. `NamespaceTests`, `UtilsTests`, `InternalFrameTests`, `SQLTests`). `PandasOnSparkTestCase` chains through `ReusedSQLTestCase -> ReusedPySparkTestCase -> PySparkBaseTestCase -> unittest.TestCase`, so the test is now collected and run.

Generated-by: Claude opus-4-7
@zhengruifeng zhengruifeng changed the title [PS][TESTS] Fix ArrowInterfaceTests being silently skipped by unittest [SPARK-56861][PS][TESTS] Fix ArrowInterfaceTests being silently skipped by unittest May 14, 2026
@zhengruifeng zhengruifeng marked this pull request as ready for review May 14, 2026 03:32
zhengruifeng added a commit that referenced this pull request May 14, 2026
…pped by unittest

### What changes were proposed in this pull request?

Fix the base class of `ArrowInterfaceTests` in `python/pyspark/pandas/tests/test_arrow_interface.py` so the test is actually discovered by `unittest`.

The class was declared as:

```python
class ArrowInterfaceTests(ArrowInterfaceTestsMixin, SQLTestUtils):
    pass
```

`SQLTestUtils` is a plain mixin that does not extend `unittest.TestCase`, so this class itself is not a `TestCase` subclass and `unittest`'s discovery (`TestLoader.loadTestsFromModule`) silently skips it.

Verified with `loader.loadTestsFromModule(...).countTestCases()`:

| | tests collected | `issubclass(TestCase)` |
| --- | --- | --- |
| Before fix | 0 | `False` |
| After fix  | 3 | `True`  |

The sibling Spark Connect parity test `ArrowInterfaceParityTests` in `tests/connect/test_parity_arrow_interface.py` extends `ReusedConnectTestCase` (which does chain to `TestCase`) and so was unaffected, masking the issue.

Fix: switch the base to `PandasOnSparkTestCase`, matching the other `pyspark.pandas.tests.test_*` classes (e.g. `NamespaceTests`, `UtilsTests`, `InternalFrameTests`, `SQLTests`). `PandasOnSparkTestCase` chains through `ReusedSQLTestCase -> ReusedPySparkTestCase -> PySparkBaseTestCase -> unittest.TestCase`.

### Why are the changes needed?

`test_spark_arrow_c_streamer_arrow_consumer` (added in SPARK-55124) has not actually been running in CI since it was introduced; it is a latent gap in coverage of the pandas-on-Spark Arrow C-stream interface.

### Does this PR introduce _any_ user-facing change?

No. Test-only change.

### How was this patch tested?

- Discovery check (above): `unittest.TestLoader.loadTestsFromModule` now collects the test.
- Ran the test locally:

```
$ python -m unittest -v pyspark.pandas.tests.test_arrow_interface
test_assert_classic_mode (...ArrowInterfaceTests) ... ok
test_spark_arrow_c_streamer_arrow_consumer (...ArrowInterfaceTests) ... ok
test_assert_classic_mode (...PandasOnSparkTestCase) ... ok
----------------------------------------------------------------------
Ran 3 tests in 10.683s
OK
```

### Was this patch authored or co-authored using generative AI tooling?

Generated-by: Claude opus-4-7

Closes #55870 from zhengruifeng/SPARK-arrow-interface-tests.

Authored-by: Ruifeng Zheng <ruifengz@apache.org>
Signed-off-by: Ruifeng Zheng <ruifengz@apache.org>
(cherry picked from commit 9ab8e43)
Signed-off-by: Ruifeng Zheng <ruifengz@apache.org>
@zhengruifeng
Copy link
Copy Markdown
Contributor Author

merged to master/4.x

@zhengruifeng zhengruifeng deleted the SPARK-arrow-interface-tests branch May 14, 2026 07:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants