Are they really the same?. The first thing you probably want to test is that the cached object and the non-cached object in fact do have the same "black box" behavior. Hand crafted optimizations have a nasty habit of breaking the very thing they are meant to help.

Does caching really improve things?The second thing to think about is what benefit is caching supposed to provide? Consider how you might put together some tests (or maybe benchmarks) that verify that the cached object really is an improvement over the non-caching object.

The boundaries of a black box are a matter of perspective. For the consumer of a business object API, caching is just another way of implementing the same API. However, if your caching is implemented as a service to be used by many objects, then those who use it will see the caching behavior itself as the boundary of the black box. They may not care whether you use arrays or hashes to implement it, but they will care that the promised algorithm does what you claim it does. For example, if you have an algorithm that says that cache members should be polled for last use timestamp each time an object is fetched, then you can test for compliance with that specific contract.

As for specific testing tools and practices, great question! I'm looking forward to the answers others have. It seems tricky to get right. Many of the things one might think first of testing for are transient effects. Furthermore, if you access objects to test the content of the cache you may end up disturbing the actual caching behavior. Yet another case of observation changing reality.

Best, beth


In reply to Re: Testing objects that cache by ELISHEVA
in thread Testing objects that cache by dreadpiratepeter

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post, it's "PerlMonks-approved HTML":



  • Posts are HTML formatted. Put <p> </p> tags around your paragraphs. Put <code> </code> tags around your code and data!
  • Titles consisting of a single word are discouraged, and in most cases are disallowed outright.
  • Read Where should I post X? if you're not absolutely sure you're posting in the right place.
  • Please read these before you post! —
  • Posts may use any of the Perl Monks Approved HTML tags:
    a, abbr, b, big, blockquote, br, caption, center, col, colgroup, dd, del, details, div, dl, dt, em, font, h1, h2, h3, h4, h5, h6, hr, i, ins, li, ol, p, pre, readmore, small, span, spoiler, strike, strong, sub, summary, sup, table, tbody, td, tfoot, th, thead, tr, tt, u, ul, wbr
  • You may need to use entities for some characters, as follows. (Exception: Within code tags, you can put the characters literally.)
            For:     Use:
    & &amp;
    < &lt;
    > &gt;
    [ &#91;
    ] &#93;
  • Link using PerlMonks shortcuts! What shortcuts can I use for linking?
  • See Writeup Formatting Tips and other pages linked from there for more info.