Changes¶
1.5.2¶
| release-date: | 2016-10-28 03:40 p.m. PDT |
|---|---|
| release-by: | Ask Solem |
Using setup/teardown instead of setup_method/teardown_method was a bad idea.
Since it’s way more common to override setup/teardown, and it’s likely people forget to call super in these methods, the change crashed several test suites.
So on pytest the decorators are now back to augmenting setup_method/teardown_method again.
1.5.1¶
| release-date: | 2016-10-28 03:40 p.m. PDT |
|---|---|
| release-by: | Ask Solem |
- 1.5.0 had a left over print statement :blush:
1.5.0¶
| release-date: | 2016-10-28 03:36 p.m. PDT |
|---|---|
| release-by: | Ask Solem |
Pytest: When decorating classes using the
skip.*andmock.*decorators, these now augmentcls.setup/cls.teardowninstead ofcls.setup_method/cls.teardown_method.It’s a bit hard to find in the pytest documentation, but pytest will always call test_cls.setup and test_cls.teardown.
Pytest: Adds
patching.object.This works exactly like
unittest.mock.patch.object(), you give it an object and an attribute name, and it will patch that attribute on the object. It also supports the same arguments and extra options.Example:
@pytest.fixture def channel(patching): c = Channel() patching(c, 'connect') return c
1.4.0¶
| release-date: | 2016-10-17 06:14 p.m. PDT |
|---|---|
| release-by: | Ask Solem |
Adds new helper:
case.pytest.fixture_with_options.Example:
@fixture_with_options() def sftp(request, username='test_username', password='test_password'): return {'username': username, 'password': password} @sftp.options(username='foo', password='bar') def test_foo(sftp): assert sftp['username'] == 'foo' assert sftp['password'] == 'bar'
1.3.1¶
| release-date: | 2016-07-22 06:14 p.m. PDT |
|---|---|
| release-by: | Ask Solem |
All case decorators now works with py.test classes.
Py.test: Adds new stdouts fixture that patches
sys.stdout, andsys.stderr.Example:
def test_x(stdouts): print('foo') assert 'foo' in stdouts.stdout.getvalue() print('bar', file=sys.stderr) assert 'bar' in stdouts.stderr.getvalue()
Py.test: The patching fixture can now mock modules.
Example:
def test_x(patching): gevent, gevent_monkey = patching.modules( 'gevent', 'gevent.monkey', ) os = patching.modules('os') gevent_monkey.patch_all.side_effect = RuntimeError() with pytest.raises(RuntimeError): from gevent import monkey monkey.patch_all()
1.3.0¶
| release-date: | 2016-07-18 05:33 p.m. PDT |
|---|---|
| release-by: | Ask Solem |
Case is now a py.test plug-in and provides a patching fixture as a shortcut to monkeypatch setting the value to a mock.
This does not have any effects for users not using py.test.
Example:
def test_foo(patching): # execv value here will be mock.MagicMock by default. execv = patching('os.execv') patching('sys.platform', 'darwin') # set concrete value patching.setenv('DJANGO_SETTINGS_MODULE', 'x.settings') # val will be of type mock.MagicMock by default val = patching.setitem('path.to.dict', 'KEY')
1.2.3¶
| release-date: | 2016-06-15 03:00 p.m. PDT |
|---|---|
| release-by: | Ask Solem |
- Case decorators now supports py.test.
- Patcher created by create_patcher now accepts *args.
1.2.2¶
| release-date: | 2016-06-23 02:46 p.m. PDT |
|---|---|
| release-by: | Ask Solem |
mock.reload_modules: Fixed compatibility with Python 3.
1.2.1¶
| release-date: | 2016-06-23 12:111 p.m. PDT |
|---|---|
| release-by: | Ask Solem |
mock.reload_modulesnow re-imports the module and callsreload()on it.This fixes issues with side effects not being properly reset after context exits.
1.2.0¶
| release-date: | 2016-06-13 05:00 p.m. PDT |
|---|---|
| release-by: | Ask Solem |
Adds
mock.mutedecorator to suppress stdout with no return value.Contributed by Tony Narlock.
Adds
Mock.on_nth_call_do_raise(excA, excB, n).This will make the mock raise excA until called n times, in which it will start to raise excB.
1.1.4¶
| release-date: | 2016-05-12 03:04 p.m. PDT |
|---|---|
| release-by: | Ask Solem |
case.patch.*functions now supports usingnewas a positional argument, for compatibility withmock.patch.
1.1.3¶
| release-date: | 2016-04-19 04:41 p.m. PDT |
|---|---|
| release-by: | Ask Solem |
case.patch(autospec=True)now works.This will use the original mock.MagicMock, not case.MagicMock.
1.1.2¶
| release-date: | 2016-04-08 11:34 p.m. PDT |
|---|---|
| release-by: | Ask Solem |
- Also
case.patch.multiple(), andcase.patch.object()now givescase.MagicMock.
1.1.1¶
| release-date: | 2016-04-08 11:13 p.m. PDT |
|---|---|
| release-by: | Ask Solem |
case.patch()now givescase.MagicMock(notmock.MagicMock).
1.1.0¶
| release-date: | 2016-04-08 10:00 p.m. PDT |
|---|---|
| release-by: | Ask Solem |
Adds new Mock methods from Python 3.6:
Mock.assert_called()Mock.assert_not_called()Mock.assert_called_once()
Adds
Mock.create_patcher()Example:
from case import Case, mock patch_commands = mock.create_patcher('long_name.management.commands') class test_FooCommand(Case): @patch_commands('FooCommand.authenticate') def test_foo(self, authenticate): pass
1.0.3¶
| release-date: | 2016-04-06 04:00 p.m. PDT |
|---|---|
| release-by: | Ask Solem |
- Python 2.6 compatibility.
mock.platform_pyimpno longer accepted default value.