Skip to main content

Easy and flexible unit test parametrization

Project description

unittest_expander is a Python library that provides flexible and easy-to-use tools to parametrize your unit tests, especially (but not limited to) those based on unittest.TestCase.

The library is compatible with Python 3.11, 3.10, 3.9, 3.8, 3.7, 3.6 and 2.7, and does not depend on any external packages (i.e., uses only the Python standard library).

Authors:

Jan Kaliszewski (zuo) and others…

License:

MIT License

Home Page:

https://github.com/zuo/unittest_expander

Documentation:

https://unittest-expander.readthedocs.io/en/stable/

Installing

The easiest way to install the library is to execute (preferably in a virtualenv) the command:

python -m pip install unittest_expander

(note that you need network access to do it this way). If you do not have the pip tool installed – see: https://packaging.python.org/guides/installing-using-pip-and-virtual-environments/

Alternatively, you can download the library source archive, unpack it, cd to the unpacked directory and execute (preferably in a virtualenv) the following command:

python -m pip install .

Note: you may need to have administrator privileges if you do not operate in a virtualenv.

It is also possible to use the library without installing it: as its code is contained in a single file (unittest_expander.py), you can just copy it into your project.

Usage example

Consider the following ugly test:

import unittest

class Test(unittest.TestCase):
    def test_sum(self):
        for iterable, expected in [
            ([], 0),
            ([0], 0),
            ([3], 3),
            ([1, 3, 1], 5),
            (frozenset({1, 3}), 4),
            ({1:'a', 3:'b'}, 4),
        ]:
            self.assertEqual(sum(iterable), expected)

Is it cool? Not at all! So let’s improve it:

import unittest
from unittest_expander import expand, foreach

@expand
class Test(unittest.TestCase):
    @foreach(
        ([], 0),
        ([0], 0),
        ([3], 3),
        ([1, 3, 1], 5),
        (frozenset({1, 3}), 4),
        ({1:'a', 3:'b'}, 4),
    )
    def test_sum(self, iterable, expected):
        self.assertEqual(sum(iterable), expected)

Now you have 6 distinct tests (properly isolated and being always reported as separate tests), although they share the same test method source.

You may want to do the same in a bit more verbose and descriptive way:

import unittest
from unittest_expander import expand, foreach, param

@expand
class Test(unittest.TestCase):

    test_sum_params = [
        param([], expected=0).label('empty gives 0'),
        param([0], expected=0),
        param([3], expected=3),
        param([1, 3, 1], expected=5),
        param(frozenset({1, 3}), expected=4),
        param({1:'a', 3:'b'}, expected=4).label('even dict is ok'),
    ]

    @foreach(test_sum_params)
    def test_sum(self, iterable, expected):
        self.assertEqual(sum(iterable), expected)

This is only a fraction of the possibilities unittest_expander offers to you.

You can learn more from the actual documentation of the module.

Project details


Download files

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

Source Distribution

unittest_expander-0.4.4.tar.gz (44.4 kB view details)

Uploaded Source

Built Distributions

unittest_expander-0.4.4-py3-none-any.whl (27.0 kB view details)

Uploaded Python 3

unittest_expander-0.4.4-py2-none-any.whl (27.0 kB view details)

Uploaded Python 2

File details

Details for the file unittest_expander-0.4.4.tar.gz.

File metadata

  • Download URL: unittest_expander-0.4.4.tar.gz
  • Upload date:
  • Size: 44.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.2 CPython/3.11.2

File hashes

Hashes for unittest_expander-0.4.4.tar.gz
Algorithm Hash digest
SHA256 dd35e170d3ad9a5c6e8eeff716db80c98cf5d682d18081c14e438b0f8f15d1a8
MD5 25d078fbfb917041e238aa6178cf29dc
BLAKE2b-256 b508bbc507df0b6d84c410d5fe809b5b8288987302542448addc55aced5ce14c

See more details on using hashes here.

File details

Details for the file unittest_expander-0.4.4-py3-none-any.whl.

File metadata

File hashes

Hashes for unittest_expander-0.4.4-py3-none-any.whl
Algorithm Hash digest
SHA256 c316b068e1af9e84c6f48ce21901fe618c11042c5ec4fcefe633c0dad0b7f3d7
MD5 888a2a9e9fcd21ae25139d3c0f305221
BLAKE2b-256 f101f9afa126bbc02c1aa52c19b2094a753a826b822e674476a3a7998f1a6001

See more details on using hashes here.

File details

Details for the file unittest_expander-0.4.4-py2-none-any.whl.

File metadata

  • Download URL: unittest_expander-0.4.4-py2-none-any.whl
  • Upload date:
  • Size: 27.0 kB
  • Tags: Python 2
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.15.0 pkginfo/1.8.3 requests/2.27.1 setuptools/44.1.1 requests-toolbelt/0.10.1 tqdm/4.64.1 CPython/2.7.17

File hashes

Hashes for unittest_expander-0.4.4-py2-none-any.whl
Algorithm Hash digest
SHA256 f306b71236516bafe23f955d3e19ee9891bf4717f1256952473ebca1bd011efc
MD5 4285c91fa4358dec47458dd78ea43b1e
BLAKE2b-256 d5f82b3cbb412d9e97571ca17c20010a8e4713944d9e383a0dfe89c2c824b43b

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page