Skip to main content

Fixture File Handler

Test Test Coverage Maintainability Code Climate technical debt Updates PyPI - Python Version PyPI - Downloads Twitter URL

This project helps you to vacate specific file path or deploy resource file into specific file path when unit testing.

Context

The most popular setup / teardown tasks about file system on unit testing is almost 2 kinds.

  1. vacate specific file path for testing file export function
  2. deploy fixture file / directory into specific file path for testing file import /export function

Then we have to think about how to back up existing file / directory between unit testing because maybe developer wants to keep those handwritten files for development.

Fixture File Handler is framework to realize simply implement the vacate and deploy actions while keeping the existing files. Of course, even if there is no file in the target path, it works fine.

Ubiquitous Language

target

The target file path to vacate or deploy file / directory for unit testing.

backup

The file path to back up existing file / directory on target file path between unit testing.

resource

The file / directory you want to deploy and let product code read / write in unit testing. It may test resource file or template file like *.dist file.

Basic behavior

Vacator

target path backup path
existing file /dir  

↓ setup

target path backup path
  existing file / dir

↓ teardown

target path backup path
existing file / dir  

Deployer

target path backup path resource path
existing file / dir   resource file / dir

↓ setup

target path backup path resource path
resource file / dir existing file /dir resource file / dir

↓ teardown

target path backup path resource path
existing file / dir   resource file / dir

Common behavior

If file / directory already exists on backup path, setup raise BackupAlreadyExistError because it's unexpected situation and developer may want to resque those backup files.

Quickstart

1. Install

pip install fixturefilehandler

2-1. Case when unittest: implement setUp() and doCleanups()

from pathlib import Path
import unittest

from fixturefilehandler.factories import VacatorFactory
from fixturefilehandler.file_paths import RelativeVacateFilePath

VACATOR = VacatorFactory.create(
    RelativeVacateFilePath(
        Path('test.txt'),
        Path('test.txt.bak'),
        Path(__file__).parent
    )
)


class ConfigurableTestCase(unittest.TestCase):
    def setUp(self):
        VACATOR.setup()

    def doCleanups(self):
        VACATOR.teardown()

2-2. Case when pytest: implement fixture

from pathlib import Path
import pytest

from fixturefilehandler.factories import DeployerFactory
from fixturefilehandler.file_paths import RelativeDeployFilePath

DEPLOYER = DeployerFactory.create(
    RelativeDeployFilePath(
        Path('test.txt'),
        Path('test.txt.bak'),
        Path('testresources/test.txt.dist'),
        Path(__file__).parent
    )
)


@pytest.fixture
def fixture_file():
    DEPLOYER.setup()
    yield DEPLOYER.FILE_PATH
    DEPLOYER.teardown()


def test_something(fixture_file):
    """test something"""

API

file_paths

SimpleVacateFilePath

This instance holds path to target and backup. Each path is independent each other.

SimpleDeployFilePath

This instance holds path to target, backup, and resource. Each path is independent each other.

RelativeVacateFilePath

This instance holds path to target, backup, and base. Each path is relative based on base path.

RelativeDeployFilePath

This instance holds path to target, backup, resource, and base. Each path is relative based on base path.

How do I...

Use different paths for each test?

setup() and teardown() also accept file_paths argument.

Case when unittest:

from pathlib import Path

import unittest

from fixturefilehandler import ResourceFileDeployer
from fixturefilehandler.file_paths import RelativeDeployFilePath


class AdvancedConfigurableTestCase(unittest.TestCase):
    @property
    def file_path(self) -> RelativeDeployFilePath:
        return RelativeDeployFilePath(
            Path('test.txt'),
            Path('test.txt.bak'),
            Path(f'testresources/{self._testMethodName}.txt'),
            Path(__file__).parent
        )

    def setUp(self):
        ResourceFileDeployer.setup(self.file_path)

    def doCleanups(self):
        ResourceFileDeployer.teardown(self.file_path)

Case when pytest:

from pathlib import Path

import pytest

from fixturefilehandler import ResourceFileDeployer
from fixturefilehandler.file_paths import RelativeDeployFilePath


@pytest.fixture
def fixture_file_advanced(request):
    file_path = RelativeDeployFilePath(
        Path('test.txt'),
        Path('test.txt.bak'),
        Path(f'testresources/{request.node.name}.txt'),
        Path(__file__).parent
    )

    ResourceFileDeployer.setup(file_path)
    yield file_path
    ResourceFileDeployer.teardown(file_path)


def test_something(fixture_file_advanced):
    """test something"""

Metadata

Release files for fixturefilehandler 1.4.0

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

Source distribution (sdist)

Source distribution for fixturefilehandler 1.4.0
File Size Uploaded
fixturefilehandler-1.4.0.tar.gz 18.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for fixturefilehandler 1.4.0
File Interpreter ABI Platform
fixturefilehandler-1.4.0-py3-none-any.whl Python 3 none any Details

Total release size: 41.3 kB

Release files / fixturefilehandler-1.4.0.tar.gz

Download URL fixturefilehandler-1.4.0.tar.gz
Size 18.7 kB
Tags Source
SHA-256 checksum
How to use checksums
86e4650bb489a68c3ccb698f7a51ac6bff797dd22828237a0654c94481a4037f
BLAKE2b-256 checksum
How to use checksums
819423b2a164d7d996a9269839a31d719fe16146358d1e628d05cda1876b55fb
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.3.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

Release files / fixturefilehandler-1.4.0-py3-none-any.whl

Download URL fixturefilehandler-1.4.0-py3-none-any.whl
Size 22.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e383cc2b04e6c6975bea2f675eeeccf43987157a787ac62a3578a9263be744b0
BLAKE2b-256 checksum
How to use checksums
0ffa47c75a34fff2fadd09cab217673ae2c8e29b072f096c005b45dcbe0e3a44
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/3.2.0 pkginfo/1.5.0.1 requests/2.24.0 setuptools/49.3.1 requests-toolbelt/0.9.1 tqdm/4.48.2 CPython/3.8.5

Release history Release notifications | RSS feed

This release

1.4.0 This release

2 release files

1.3.0

2 release files

1.2.0

2 release files

1.1.0

2 release files

1.0.0

2 release files

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