[dev] [commits] Horde branch master updated. 3d5433806251d1e14d73fb2f5abf8347cf07389d
Jan Schneider
jan at horde.org
Sun Sep 12 16:17:20 UTC 2010
Zitat von Gunnar Wrobel <p at rdus.de>:
> Quoting Michael M Slusarz <slusarz at horde.org>:
>
>
>> -----------------------------------------------------------------------
>>
>> commit 21d7218dc143d6f728c6d2f833e08c2c5e833cce
>> Author: Michael M Slusarz <slusarz at curecanti.org>
>> Date: Fri Sep 10 22:38:37 2010 -0600
>>
>> Use PHPUnit mock function, rather than static mock files
>
> Why do you prefer the mocks here? I do admit that the stubs I wrote
> were really simple and replacing them with mocks probably makes
> sense in the context of this single test.
>
> But in my experience test mocks just don't work well in the long
> term. For one thing they are extremely hard to read. I believe some
> people recently wrote alternative mock implementations for PHPUnit
> that solve this problem at least. But I know from experience that
> all these mock expectations are hard to maintain. They end up all
> over the test suites and if you are changing anything about the
> mocked interface it gets hard to adapt all those calls. In order to
> understand the mock expectations you often need to look into the
> corresponding code to see why some of these are actually needed. So
> mocking will often tie your test to the actual implementation.
>
> As the Itip test was the first application level unit test I added
> for Horde the stubs were still residing within IMP. The plan would
> have been to move these into the "Test" package at some point and
> extending the stubs into a general replacement for "the real thing"
> when writing application level unit tests. So you would have a stub
> registry implementation that would allow access to and manipulation
> of all the features provided by the real registry.
>
> This approach also has some drawbacks:
>
> For one thing these are not really unit tests anymore but tend to be
> integration tests (without any access to external systems though).
> But to me this makes sense for the application level where it seems
> reasonable to define a test that reads "user clicks a, user clicks
> b, event got saved to storage".
>
> Another thing is the complexity of the stubs: Once these get closer
> to the real thing it is harder to actually change them as they may
> easily affect hundreds of tests. But on the other hand this can
> actually be quite useful: Horde_Registry is rather central so it
> also cannot be easily changed. If it needs modification though you
> would adapt the stub implementation, too. The fact that this stub is
> used in many places where the registry is required should help in
> finding spots that still need to be adapted to the change in the
> real registry.
>
> Last but not least these tests usually turn out to run a lot slower
> as more elements are involved in testing. Not good but hard to
> change. And something I tend to accept for the benefit I see in
> basing our application level testing on stubs.
>
> In summary may not see much of a problem with the one commit I
> commented here. For me the main question is how others view this
> topic and which style of testing they'd prefer. I have seen the mock
> based approach fail horribly in the past half year and that is why
> this issue is important to me.
Even though I have barely worked with mocks yet, my experience in
those case haven't been good either. Each time I ended up debugging
the generated mocks, which is a major pita.
So, with my limited experience with mock functionality, I tend to
agree with Gunnar.
Jan.
--
Do you need professional PHP or Horde consulting?
http://horde.org/consulting/
More information about the dev
mailing list