Skip to content

Latest commit

 

History

History
84 lines (58 loc) · 2.48 KB

README.md

File metadata and controls

84 lines (58 loc) · 2.48 KB

Description

Overview

Injects fixture into methods arguments from class properties a.k.a namespace.

Namespace is a class designed to be build on top of properties, @property and @cached_property annotated methods.

To inject fixtures in a test class, methods in a test class must starts with a test name. Fixtures are loaded in namespace class definition order.

@unzip decorator allows to load generator/mock directly without calling next(mock) on it. All generators (marked with unzip or without) are automatically closed after test is done.

Tests can be copy using @func_copy decorator with renaming arguments using map_args. Copy cannot be done in the same namespace.

Example:

class FixtureNamespace:
    @property
    def words(self):
        return ['a', 'b', 'c']

    @cached_property
    def something(self):
            return self.words + ['d']
    
    @property # or @cached_property
    @fixture.unzip
    def mock(self):
      with patch('path.to.Mock') as mock:
        yield mock

@fixture.use_fixture_namespace(FixtureNamespace)
class TestClass:
    def test_words(self, words):
        assert words == ['a', 'b', 'c']

    def test_something(self, something, mock):
        assert something == ['a', 'b', 'c', 'd']
        assert isinstance(mock, Mock)

class AnotherNamespace:
    @property
    def words(self):
        return ['X', 'Y']

    @property
    def something(self):
      return 'xyz'

    @property
    def new_mock_name(self):
      return 123

@fixture.use_fixture_namespace(AnotherNamespace)
class AnotherClass:
    @fixture.func_copy(TestClass.test_words)
    def test_copy_1(): ...

    @fixture.func_copy(
      TestClass.test_something,
      map_args={'mock': 'new_mock_name'}
    )
    def test_copy_2(): ...

Source code

src directory contains a single file base.py, with a decorator use_fixture_namespace designed for injecting properties into test classes from a specified namespace.

Testing

tests directory contains a single file base_test.py, with a unit tests for a use_fixture_namespace decorator.

To run tests, run script run_tests.sh inside scripts directory. It will generates unit tests report and coverage report inside reports directory.

Building

To build a package run run_build.sh inside scripts directory. It will generate whl package file inside dist directory.

Installation

Being inside package base directory run

pip install dist/<package_name>.whl