Movatterモバイル変換


[0]ホーム

URL:


Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

gh-134079: AddaddCleanup,enterContext anddoCleanups tounittest.subTest and tests#134318

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to ourterms of service andprivacy statement. We’ll occasionally send you account related emails.

Already on GitHub?Sign in to your account

Open
ArunRawat404 wants to merge4 commits intopython:main
base:main
Choose a base branch
Loading
fromArunRawat404:fix-issue-134079

Conversation

ArunRawat404
Copy link

Summary

gh-134079: AddaddCleanup,enterContext anddoCleanups tounittest.subTest and add corresponding tests

Description

This PR implements support foraddCleanup,enterContext, anddoCleanups inunittest.subTest() contexts, as discussed inissue-134079. This enables users to register cleanups or use context managers inside a withself.subTest(): block, similar to how it's done inTestCase

Tests

Added tests intest_runner.py to validate:

  • Cleanup order (LIFO)
  • Cleanup on failure
  • enterContext() behavior on success/failure
  • Exception safety in context manager entry and exit

I'm still learning the internals of CPython and writing tests, so please don't hesitate to suggest improvements. I'd really appreciate any feedback.

@python-cla-bot
Copy link

python-cla-botbot commentedMay 20, 2025
edited
Loading

All commit authors signed the Contributor License Agreement.

CLA signed

@bedevere-app
Copy link

Most changes to Pythonrequire a NEWS entry. Add one using theblurb_it web app or theblurb command-line tool.

If this change has little impact on Python users, wait for a maintainer to apply theskip news label instead.

Copy link
Member

@picnixzpicnixz left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

@@ -1626,3 +1629,46 @@ def shortDescription(self):

def __str__(self):
return "{} {}".format(self.test_case, self._subDescription())


class _SubTestCleanupHelper():
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Suggested change
class_SubTestCleanupHelper():
class_SubTestCleanupHelper:

Comment on lines 1645 to 1646
def _callCleanup(self, function, /, *args, **kwargs):
function(*args, **kwargs)
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Suggested change
def_callCleanup(self,function,/,*args,**kwargs):
function(*args,**kwargs)
@staticmethod
def_callCleanup(function,/,*args,**kwargs):
function(*args,**kwargs)

I don't think we need to hold a reference toself so a staticmethod can be used but OTOH, I don't know if there is a world where we want to be able to subclass this one in the future.

Comment on lines 1652 to 1654
if hasattr(TestSubTestCleanups, '_active_instance'):
del TestSubTestCleanups._active_instance

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Suggested change
ifhasattr(TestSubTestCleanups,'_active_instance'):
delTestSubTestCleanups._active_instance
ifhasattr(TestSubTestCleanups,'_active_instance'):
delTestSubTestCleanups._active_instance

Copy link
Author

@ArunRawat404ArunRawat404May 21, 2025
edited
Loading

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Can you explain this one i don't see any difference

Copy link
Member

@picnixzpicnixzMay 22, 2025
edited
Loading

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

We use 2 blank lines to separate toplevel classes/functions and 1 line for methods.

]
self.assertEqual(self.events, expected_events)

def tearDown(self):
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others.Learn more.

Can you put the tearDown() after the setUp() instead? it'll be easier to maintain and read.

ArunRawat404 reacted with thumbs up emoji
Sign up for freeto join this conversation on GitHub. Already have an account?Sign in to comment
Reviewers

@picnixzpicnixzpicnixz left review comments

Assignees
No one assigned
Projects
None yet
Milestone
No milestone
Development

Successfully merging this pull request may close these issues.

2 participants
@ArunRawat404@picnixz

[8]ページ先頭

©2009-2025 Movatter.jp