As others have already said much better than I can: "It is a matter of perspective".

If you want to test the published API and the cache is "hidden away", i.e. you cannot check through the API whether or not the cache "worked", there is no good way to test it.

But nothing of course stops you from checking the internals of your modules in a different set of tests.

I have had a similar problem, where I had written a framework into which a specific parser was to be plugged-in. The framework contains its own set of basic "utility" methods, some of which are used by a parer-plugins. One set of tests exercise the "utility" methods (which is the low-level internal API) and the tests linked to the parser plugins test whether the frame-work including the parser "works as advertised" by using the external API.

Applying this to your case, I would say test both the API (for which the cache is not an issue) and also test the working of the cache itself by stepping inside of your API.

CountZero

A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James


In reply to Re: Testing objects that cache by CountZero
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.