On Tue, Aug 27, 2019 at 6:55 PM Aryeh Gregor <[email protected]> wrote:

> I see that in some classes, like WANObjectCache, most methods are declared
> final. Why is this? [..]
>
> The problem is that PHPUnit mocks can't touch final methods. [..]


What did you want to assert in this test?

I find there is sometimes a tendency for a test to needlessly duplicate the
source code by being too strict on expecting exactly which method is called
to the point that it becomes nothing but a more verbose version of the
source code; always requiring a change to both.

Personally, I prefer a style of testing where it providers a simpler view
of the code. More like a manual of how it should be used, and what
observable outcome it should produce.

I think PHPUnit's assertion helpers for things like method()->once() are
quite useful. But, personally, I almost never need them. And in the few
occasions where I did use them, it's never a private, static or final
method (which can't be mocked). In some cases, I accidentally tried to mock
such method and found every time it was either because of pre-existing
technical debt, or because I misunderstood the code, or because I was
testing arbitrary implementation details.

As such, to perhaps help with the conversation, I'd like to have a
practical example we can look at and compare potential solutions. Perhaps
from WANObjectCache, or perhaps with something else.

-- Timo
_______________________________________________
Wikitech-l mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/wikitech-l

Reply via email to