Testscenarios

0.5.0 · active · verified Wed Apr 15

Testscenarios is a Python library that extends `unittest` to provide clean dependency injection, enabling a single test method to be run with multiple scenarios. This is particularly useful for interface testing (testing many implementations via a single test suite) or for classic dependency injection, where test dependencies are provided externally. The library is currently at version 0.5.0, offering a stable approach to scenario-based testing.

Warnings

Install

Imports

Quickstart

This quickstart demonstrates defining multiple scenarios directly within a `unittest.TestCase` by inheriting from `TestWithScenarios`. Each scenario is a tuple containing a descriptive name and a dictionary of parameters. These parameters are injected as instance attributes into the test method when executed, allowing the same test logic to run with different data sets. To run, save as a Python file and execute with `python -m unittest your_test_file.py`.

import unittest
from testscenarios import TestWithScenarios

class MyScenarioTest(TestWithScenarios, unittest.TestCase):
    # Define scenarios as a list of (name, dictionary_of_parameters) tuples
    scenarios = [
        ('addition_scenario', dict(num1=5, num2=3, expected_sum=8)),
        ('subtraction_scenario', dict(num1=10, num2=4, expected_difference=6)),
        ('multiplication_scenario', dict(num1=2, num2=6, expected_product=12))
    ]

    def test_addition(self):
        """Test addition operation using scenario parameters."""
        # Parameters from the current scenario are automatically available as instance attributes
        actual_sum = self.num1 + self.num2
        self.assertEqual(actual_sum, self.expected_sum)

    def test_subtraction(self):
        """Test subtraction operation using scenario parameters."""
        actual_difference = self.num1 - self.num2
        self.assertEqual(actual_difference, self.expected_difference)

    def test_multiplication(self):
        """Test multiplication operation using scenario parameters."""
        actual_product = self.num1 * self.num2
        self.assertEqual(actual_product, self.expected_product)

if __name__ == '__main__':
    unittest.main()

view raw JSON →