Fixture File Handler
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.
- vacate specific file path for testing file export function
- 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)
| File | Size | Uploaded | |
|---|---|---|---|
| fixturefilehandler-1.4.0.tar.gz | 18.7 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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
|