aboutsummaryrefslogtreecommitdiff
path: root/README.md
diff options
context:
space:
mode:
Diffstat (limited to 'README.md')
-rw-r--r--README.md112
1 files changed, 63 insertions, 49 deletions
diff --git a/README.md b/README.md
index 559cb12..cbdf11f 100644
--- a/README.md
+++ b/README.md
@@ -1,84 +1,97 @@
-# 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/jmcgeheeiv/pyfakefs/workflows/Testsuite/badge.svg)
+# 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
+touching the real disk. The software under test requires no modification to
work with pyfakefs.
-pyfakefs works with Linux, Windows and MacOS.
+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 file provides general usage instructions for pyfakefs. There is more:
-
-* The documentation at [GitHub Pages:](http://jmcgeheeiv.github.io/pyfakefs)
- * The [Release documentation](http://jmcgeheeiv.github.io/pyfakefs/release)
- 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](http://jmcgeheeiv.github.io/pyfakefs/master)
- contains the same documentation for the current master branch
- * The [Release 3.7 documentation](http://jmcgeheeiv.github.io/pyfakefs/release37)
- contains usage documentation for the last version of pyfakefs
+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 3.3 documentation](http://jmcgeheeiv.github.io/pyfakefs/release33)
- contains usage documentation for the last version of pyfakefs
- supporting Python 2.6, and for the old-style API (which is still
- supported but not documented in the current release)
-* The [Release Notes](https://github.com/jmcgeheeiv/pyfakefs/blob/master/CHANGES.md)
+* The [Release Notes](https://github.com/pytest-dev/pyfakefs/blob/main/CHANGES.md)
show a list of changes in the latest versions
-### Linking to pyfakefs
-
-In your own documentation, please link to pyfakefs using the canonical URL <http://pyfakefs.org>.
-This URL always points to the most relevant top page for pyfakefs.
-
## Usage
-
-pyfakefs has support for `unittest` and `pytest`, but can also be used
-directly using `fake_filesystem_unittest.Patcher`. Refer to the
-[usage documentation](http://jmcgeheeiv.github.io/pyfakefs/master/usage.html)
-for more information on test scenarios, test customization and
+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.6 and above, on Linux, Windows and OSX
-(MacOS), and with PyPy3.
+pyfakefs works with CPython 3.8 and above, on Linux, Windows and macOS, and
+with PyPy3.
-pyfakefs works with [pytest](http://doc.pytest.org) version 3.0.0 or above.
+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.
-For example, pyfakefs will not work with [`lxml`](http://lxml.de/). In this case
-`lxml` must be replaced with a pure Python alternative such as
-[`xml.etree.ElementTree`](https://docs.python.org/3/library/xml.etree.elementtree.html).
+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.6 to 3.10, and with PyPy3 on Linux, using
-[GitHub Actions](https://github.com/jmcgeheeiv/pyfakefs/actions).
+pyfakefs is currently automatically tested on Linux, macOS and Windows, with
+Python 3.8 to 3.12, 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 `unittest` or `pytest`:
+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
-$ python -m pyfakefs.tests.all_tests_without_extra_packages
-$ python -m pytest pyfakefs/pytest_tests/pytest_plugin_test.py
```
-These scripts are called by `tox` and Travis-CI. `tox` can be used to run tests
-locally against supported python versions:
+Similar scripts are called by `tox` and Github Actions. `tox` can be used to
+run tests locally against supported python versions:
```bash
$ tox
@@ -100,14 +113,14 @@ docker run -t pyfakefs
### Contributing to pyfakefs
We always welcome contributions to the library. Check out the
-[Contributing Guide](https://github.com/jmcgeheeiv/pyfakefs/blob/master/CONTRIBUTING.md)
+[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 is used in over 2,000
+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
@@ -121,5 +134,6 @@ Google released pyfakefs to the public in 2011 as Google Code project
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/jmcgeheeiv/pyfakefs) where an enthusiastic community actively supports, maintains
-and extends pyfakefs.
+[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.