On 07/10/2015 01:13 PM, Robert Collins wrote:
On 10 July 2015 at 23:04, Dmitry Tantsur <dtant...@redhat.com> wrote:
Hi all,

Recent breakage makes me finally raise the question that bothered me for
some time: are there possible alternatives to mock library we could use?

There are. Personally, mock is probably about equal evil-wise to any
mocking library - I find mocking leads to a very heavy dependence on
large functional test suites. But thats a different discussion.

A couple reasons for that:

1. Devs don't seem to care about semver, backward compatibility and all this
boring stuff. Releasing a minor version that breaks all or vast majority of
users is not nice at all.

Fortunately thats not what happened. Openstack had a lot of tests that
were broken, mock 1.1.0 held up a mirror and let us see that. Its the
same mock thats in the standard library - unittest.mock - backported;
any use of unittest.mock from Python 3.5 would have shown the same
thing. There are no breaks to the actual API as far as I can tell[1].

I see that a lot of code started breaking due to

 side_effect = Exception()

no longer working. Which was a declared way for some time, at least to my best knowledge. And I do realize it's just a back port, but as a user of a _library_ I'd like such breakages to be treated with care.

Maybe it happened and I was just not looking at a proper place.


2. side_effect syntax is no longer sane. Previously it was awesome:

  side_effect = Exception()
  side_effect = [value, Exception()]

etc. Now it's a big typing disaster:

  side_effect = iter([Exception()])

ok, I can live with [], I understand that it may be required for some corner
cases. I can't understand why mock can't call iter() internally.
And seriously, it's a breaking change, and should have been
communicated/issued a warning for some time.

It doesn't show up in the test suite - and I put specific code in
place to deal with the potentially related case where Python 2.7's
next() is different to the 3.x next() [2.6 didn't have next()]. So -
if you've found something that works in unittest.most on Python 3.6
[or 3.5beta3] then its a genuine backport bug and I can fix that up
asap. I haven't seen a bug filed from you about it, so perhaps thats
the first step.

People say it's stopped working in Python 3.4.2 and it did work in Python 3.4.0. I didn't verify this sentence.


If someone has contacts within mock team, are there any chances that will
provide a convenient alternative to side_effect (though any new attribute
would be a breaking change for Mock class)?

Any new features should be discussed in either the Python bug tracker
(bugs.python.org) or the python-ideas mailing list. But first lets
make sure this isn't just a bug in the backports.

Any ideas?
Dmitry.

[1]: There is one under investigation from Neutron, but it certainly
wasn't a known issue, and the fairly extensive test suite doesn't show
it.

-Rob




__________________________________________________________________________
OpenStack Development Mailing List (not for usage questions)
Unsubscribe: openstack-dev-requ...@lists.openstack.org?subject:unsubscribe
http://lists.openstack.org/cgi-bin/mailman/listinfo/openstack-dev

Reply via email to