Skip to main content

When you write a C extension, you can provide a Python version as a backup. A problem with this is that only one of these modules will be tested, while the other is neglected.

DualTest provides a class that, when inherited from, imports a list of modules and attributes from modules and makes them available as globals during tests. Allowing you to easily test both versions of a module and write just one set of tests.

Usage

Create a test case class derived from DualTestCase and set the import_names or import_from_names class attributes.

import_names should be set to a list of the names of modules with Python source and C extension versions to import:

class ImportTestCase(DualTestCase):
    import_names = ['mod1', 'mod2']

    def test_something(self):
        # mod1 and mod2 will be available here.

import_from_names causes attributes to be imported from modules just like from module import attribute would. It should be set to a list of tuples containing the name of the module to import from, and a list of attribute names to import. If one of the attribute names is “*”, then all public attributes are imported:

class ImportFromTestCase(DualTestCase):
    import_from_names = [
        ('mod1', ['attr1', 'attr2']),
        # "*" causes all public attributes to be imported.
        ('mod2', ['*']),
        ]

    def test_something(self):
        # attr1, attr2 and everything from mod2 will be available here.

Full Example

from dualtest import DualTestCase


class ImportTestCase(DualTestCase):
    import_names = ['mod1', 'mod2']

    def test_something(self):
        # mod1 and mod2 will be available here.


class ImportFromTestCase(DualTestCase):
    import_from_names = [
        ('mod1', ['attr1', 'attr2']),
        # "*" causes all public attributes to be imported.
        ('mod2', ['*']),
        ]

    def test_something(self):
        # attr1, attr2 and everything from mod2 will be available here.

Changelog

1.0.1

  • Patch imported modules into “sys.modules” during tests.

  • Fix error when “import_from_names” references a non-existing module.

  • Fix bug when importing ‘*’ from a module.

  • Add module type context when “subTest” is called.

Release files for dualtest 1.0.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for dualtest 1.0.1
File Size Uploaded
dualtest-1.0.1.tar.gz 5.9 kB Details

Release files / dualtest-1.0.1.tar.gz

Download URL dualtest-1.0.1.tar.gz
Size 5.9 kB
Tags Source
SHA-256 checksum
How to use checksums
a6429c0946f936d7a5cdf74681a36fe0630bce0edde9cf1ce2764db4d827d3ca
BLAKE2b-256 checksum
How to use checksums
7f1ccebe9c8ab0303d7fd6af6ecce3c846bc09073056cc3a8f5d79dc7ced9d36
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.13.0 pkginfo/1.4.2 requests/2.21.0 setuptools/41.0.1 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.6.8

Release history Release notifications | RSS feed

This release

1.0.1 This release

1 release file

1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page