# pyfakefs [![PyPI version](https://badge.fury.io/py/pyfakefs.svg)](https://badge.fury.io/py/pyfakefs) [![Python version](https://img.shields.io/pypi/pyversions/pyfakefs.svg)](https://img.shields.io/pypi/pyversions/pyfakefs.svg) ![Testsuite](https://github.com/pytest-dev/pyfakefs/workflows/Testsuite/badge.svg) [![Documentation Status](https://readthedocs.org/projects/pytest-pyfakefs/badge/?version=latest)](https://pytest-pyfakefs.readthedocs.io/en/latest/?badge=latest) [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/pytest-dev/pyfakefs/main.svg)](https://results.pre-commit.ci/latest/github/pytest-dev/pyfakefs/main)


pyfakefs implements a fake file system that mocks the Python file system modules.
Using pyfakefs, your tests operate on a fake file system in memory without
touching the real disk. The software under test requires no modification to
work with pyfakefs.

Pyfakefs creates a new empty in-memory file system at each test start, which replaces
the real filesystem during the test. Think of pyfakefs as making a per-test temporary
directory, except for an entire file system.

There are several means to achieve this: by using
the `fs` fixture if running pytest, by using `fake_filesystem_unittest.TestCase` as a
base class if using unittest, by using a `fake_filesystem_unittest.Patcher` instance
as a context manager, or by using the `patchfs` decorator.



pyfakefs works with current versions of Linux, Windows and macOS.

## Documentation

This document provides a general overview for pyfakefs.  There is more:

* The documentation at **Read the Docs**:
  * The [Release documentation](https://pytest-pyfakefs.readthedocs.io/en/stable)
    contains usage documentation for pyfakefs and a description of the
    most relevant classes, methods and functions for the last version
    released on PyPI
  * The [Development documentation](https://pytest-pyfakefs.readthedocs.io/en/latest)
    contains the same documentation for the current main branch
  * The [Release 3.7 documentation](https://pytest-pyfakefs.readthedocs.io/en/v3.7.2/)
    contains usage documentation for the last version of pyfakefs
    supporting Python 2.7
* The [Release Notes](https://github.com/pytest-dev/pyfakefs/blob/main/CHANGES.md)
  show a list of changes in the latest versions

## Usage
The simplest method to use pyfakefs is using the `fs` fixture with `pytest`.
Refer to the
[usage documentation](https://pytest-pyfakefs.readthedocs.io/en/latest/usage.html)
for information on other test scenarios, test customization and
using convenience functions.

## Features
Apart from automatically mocking most file-system functions, pyfakefs
provides some additional features:
- mapping files and directories from the real file system into the fake filesystem
- configuration and tracking of the file system size
- pause and resume of patching to be able to use the real file system inside a
  test step
- (limited) emulation of other OSes (Linux, macOS or Windows)
- configuration to behave as if running as a non-root user while running
  under root

## Compatibility
pyfakefs works with CPython 3.7 and above, on Linux, Windows and macOS, and
with PyPy3.

pyfakefs works with [pytest](http://doc.pytest.org) version 3.0.0 or above,
though a current version is recommended.

pyfakefs will not work with Python libraries that use C libraries to access the
file system. This is because pyfakefs cannot patch the underlying C libraries'
file access functions--the C libraries will always access the real file
system. Refer to the
[documentation](https://pytest-pyfakefs.readthedocs.io/en/latest/intro.html#limitations)
for more information about the limitations of pyfakefs.

## Development

### Continuous integration

pyfakefs is currently automatically tested on Linux, macOS and Windows, with
Python 3.7 to 3.11, and with PyPy3 on Linux, using
[GitHub Actions](https://github.com/pytest-dev/pyfakefs/actions).

### Running pyfakefs unit tests

#### On the command line
pyfakefs unit tests can be run using `pytest` (all tests) or `unittest`
(all tests except `pytest`-specific ones):

```bash
$ cd pyfakefs/
$ export PYTHONPATH=$PWD

$ python -m pytest pyfakefs
$ python -m pyfakefs.tests.all_tests
```

Similar scripts are called by `tox` and Github Actions. `tox` can be used to
run tests locally against supported python versions:

```bash
$ tox
```

#### In a Docker container

The `Dockerfile` at the repository root will run the tests on the latest
Ubuntu version.  Build the container:
```bash
cd pyfakefs/
docker build -t pyfakefs .
```
Run the unit tests in the container:
```bash
docker run -t pyfakefs
```

### Contributing to pyfakefs

We always welcome contributions to the library. Check out the
[Contributing Guide](https://github.com/pytest-dev/pyfakefs/blob/main/CONTRIBUTING.md)
for more information.

## History
pyfakefs.py was initially developed at Google by Mike Bland as a modest fake
implementation of core Python modules.  It was introduced to all of Google
in September 2006. Since then, it has been enhanced to extend its
functionality and usefulness.  At last count, pyfakefs was used in over 2,000
Python tests at Google.

Google released pyfakefs to the public in 2011 as Google Code project
[pyfakefs](http://code.google.com/p/pyfakefs/):
* Fork
  [jmcgeheeiv-pyfakefs](http://code.google.com/p/jmcgeheeiv-pyfakefs/) added
  [direct support for unittest and doctest](../../wiki/Automatically-find-and-patch-file-functions-and-modules)
* Fork
  [shiffdane-jmcgeheeiv-pyfakefs](http://code.google.com/p/shiffdane-jmcgeheeiv-pyfakefs/)
  added further corrections

After the [shutdown of Google Code](http://google-opensource.blogspot.com/2015/03/farewell-to-google-code.html)
was announced, [John McGehee](https://github.com/jmcgeheeiv) merged all three Google Code projects together
[here on GitHub](https://github.com/pytest-dev/pyfakefs) where an enthusiastic community actively supports, maintains
and extends pyfakefs. In 2022, the repository has been transferred to
[pytest-dev](https://github.com/pytest-dev) to ensure continuous maintenance.
