Skip to main content

Build Status PyPI version Downloads Downloads

Python-Delayed-Assert

Delayed aka. Soft asserts for python

Few features:

- No Dependenices on any other framework/library.
- Should work with any testing framework.
- Can be use as decorator or context manager.

Sample

Installation

Install via pip

    pip install delayed-assert

Install from master

    pip install git+https://github.com/pr4bh4sh/delayed-assert

Uses

See example_unittest.py for usage.

Using assertion library with lambda

Pass the assertion call as

    expect(lambda: self.assertListEqual([4,5,6,2,5],[7,8]))

While I've tested only with unittest asserttion,It should be able to use any assertion library.

Keep in mind that, Python does not support statement inside lambda, so

    expect(lambda: assert 1 == 1)

won't work as it is not a valid lambda expression in python

Current possible uses

    def testSomething(self):
        delayed_assert.expect(1 == 1) # will succeed
        delayed_assert.expect(1 == 2) # will fail but won't stop execution
        delayed_assert.expect(3 == 2, "Value don't match") # will fail but won't stop execution
        delayed_assert.expect(3 == 3) # will succeed
        # will stop execution and show the stack trace of 2nd assertion
        delayed_assert.assert_expectations()

    def testLambdas(self):
        expect(lambda: self.assertEqual(3,4)) # will fail but won't stop execution
        expect(lambda: self.assertListEqual([4,5,6,2,5],[7,8])) # will fail but won't stop execution
        assert_expectations()

    @delayed_assert.assert_all()
    def testDecorator(self):
        expect('five' == 'Six', 'String do not match')
        expect([5,2] == [3,4], 'List item do not match')
        expect([3,4] == [3,4], 'This message wont be printed')
        # No need to call delayed_assert.assert_expectations() when decorator is used
    
    def testContextManeger(self):
        with delayed_assert.assert_all():
            expect('four' == 'Six', 'String do not match')
            expect([5,2] == [3,4], 'List item do not match')
            expect([3,4] == [3,4], 'This message wont be printed')
            # No need to call delayed_assert.assert_expectations() when using context maneger is used

Color Output Control

The library supports toggling colorized output on/off via environment variable or programmatically.

Disable Colors via Environment Variable

# Disable colors
DELAYED_ASSERT_ENABLE_COLOR=0 python -m unittest example_unittest.py

# Enable colors (default)
DELAYED_ASSERT_ENABLE_COLOR=1 python -m unittest example_unittest.py

Values that disable colors: 0, false, no, off (case-insensitive)

Disable Colors Programmatically

from delayed_assert.delayed_assert import set_color_enabled, get_color_enabled

# Disable colors
set_color_enabled(False)

# Check status
if get_color_enabled():
    print("Colors are enabled")

This is useful for:

  • CI/CD environments where ANSI color codes may not be supported
  • Log files where color codes create noise
  • Environments with accessibility requirements

Caller Stack Verification

By default, the library verifies that expect() is called from a method named test*. You can disable this check if you need to use expect() in helper methods or custom test runners.

Disable via Environment Variable:

DELAYED_ASSERT_CHECK_CALLER=0 python -m unittest example_unittest.py

Disable Programmatically:

from delayed_assert.delayed_assert import set_check_caller

set_check_caller(False)

Using the @test_case Decorator:

Alternatively, you can mark any function as a test case using the @test_case decorator. This allows expect() to identify the function correctly without disabling verificaton globally.

from delayed_assert import expect, assert_expectations, test_case

@test_case
def verify_custom_scenario():
    expect(1 == 1, "Should pass")

def test_runner():
    verify_custom_scenario()
    assert_expectations()

Credit : http://pythontesting.net/strategy/delayed-assert/

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

delayed_assert-0.4.2.tar.gz (5.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

delayed_assert-0.4.2-py3-none-any.whl (6.2 kB view details)

Uploaded Python 3

File details

Details for the file delayed_assert-0.4.2.tar.gz.

File metadata

  • Download URL: delayed_assert-0.4.2.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for delayed_assert-0.4.2.tar.gz
Algorithm Hash digest
SHA256 3ec7e3ab65ca674c241ebe66510104b318b3688a520d02a9da08a1abfd127d36
MD5 4f44d6c7ea25c355fa8bcad5ba3233d2
BLAKE2b-256 eeaaa8f07e0f7f6279106bd7e41ad1cf6fea48bb1f3e0e6dbf8ae77d842db1dc

See more details on using hashes here.

Provenance

The following attestation bundles were made for delayed_assert-0.4.2.tar.gz:

Publisher: publish.yml on pr4bh4sh/delayed-assert

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file delayed_assert-0.4.2-py3-none-any.whl.

File metadata

  • Download URL: delayed_assert-0.4.2-py3-none-any.whl
  • Upload date:
  • Size: 6.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for delayed_assert-0.4.2-py3-none-any.whl
Algorithm Hash digest
SHA256 4520f5d8ab9cdfe98de22568de93bf1e6f21e2a81efa8ec58dc0c1b48d424c8a
MD5 7908a00a971aeecab79742f84e78524a
BLAKE2b-256 d46b50fe1c03685f1ef67d0795fd57b37864e862f1a35e92f0b2fa0bf44703d9

See more details on using hashes here.

Provenance

The following attestation bundles were made for delayed_assert-0.4.2-py3-none-any.whl:

Publisher: publish.yml on pr4bh4sh/delayed-assert

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

0.4.2 This release

2 files

0.4.1

2 files

0.4.0

2 files

0.3.6

2 files

0.3.5

2 files

0.3.4

2 files

0.3.3

2 files

0.3.2

2 files

0.3.1

2 files

0.3.0

2 files

0.2.3

2 files

0.2.1

2 files

0.2

2 files

0.1

1 file

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page