Skip to content

Test execution hangs when running (by UI only) an individual test that mocks openΒ #24399

@martin-s-a

Description

@martin-s-a

Description

When running Python tests in VS Code using Test Adapter Converter UI, test will hang if I individually run a test that uses mock_open from unittest.

If I run the individual test from command line, it works as expected. If I run all the tests in the file, both from the UI or terminal, it also works as expected without hanging. If I run the individual test from the UI in debug mode, it also works as intended.

Note: When running the test individually from the UI, even if it hangs, the test results tab shows the expected message indicating that the test passed correctly:

Running pytest with args: ['-p', 'vscode_pytest', '--rootdir=c:\\Users\\Martin\\Documents\\Repos\\my-test-app', 'c:\\Users\\Martin\\Documents\\Repos\\my-test-app\\tests\\unitary\\my_file_test.py::test_read_file_contents']
============================= test session starts =============================
platform win32 -- Python 3.12.1, pytest-8.3.3, pluggy-1.5.0
rootdir: c:\Users\Martin\Documents\Repos\my-test-app
configfile: pyproject.toml
plugins: cov-5.0.0
collected 1 item

tests\unitary\my_file_test.py .

============================== 1 passed in 0.15s ==============================

However, the Finished running tests! line won't show up until I manually stop the test from the UI.

Enviroment

I am using Python 3.12.1, in a Poetry enviroment, with pytest 8.3.3 (latest release as of right now) and pytest-cov 5.0.0. VS Code is in version 1.95.1, and my installed extensions are:

  • Python: v2024.18.0
  • Pylance: v2024.11.1
  • Python Debugger: v2024.12.0
  • Test Adapter Converter: v0.2.1
  • YAML: v1.15.0
  • SonarLint: v.4.11.1
  • PowerShell: v2024.4.0
  • GitHub Actions: v0.27.0
  • Even Better TOML: v0.19.2

All of this is running in a Windows 10 laptop.

Example

To replicate this issue, i made this simple function:

def read_file_contents(file_path):
    with open(file_path, 'r') as file:
        return file.readlines()

With this test:

from unittest.mock import mock_open

import pytest

__STREAM_READLINES = ["line1\n", "line2\n", "line3\n"]

def test_read_file_contents(__mock_open):
  result = read_file_contents('dummy_path.txt')
  assert result == __STREAM_READLINES

@pytest.fixture
def __mock_open():
  m_open = mock_open(read_data=''.join(__STREAM_READLINES))
  with patch("builtins.open", m_open):
    yield m_open

Metadata

Metadata

Assignees

Labels

area-testingbugIssue identified by VS Code Team member as probable bugfeature-requestRequest for new features or functionality

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions