Re: Unit Testing Frameworks (was Re: Singletons)
On 12/26/2012 2:36 PM, Ian Collins wrote:
First ... about your idea in general. Making unit tests is
difficult when singular state on what your unit depends is behind
free functions and you use some mocking framework that does not
help turning free functions into mock versions.
Can you give a C++ example for this?
Real world example of free C++ mock framework where mocking free
functions is not implemented: http://code.google.com/p/googlemock/
Or ... at least it was not implemented last I eyeballed it.
Excuse me, but why on earth would one want a *mocking framework* to
create a function? Instead of just writing it and move along with
actual job aimed? Maybe this thing "misses" that utility for its
sitting on the trivial list?
Mocking free functions in a generic way saves you from having to write
them. I often use my mocking framework to test code that calls system
or other C libraries. Being able to specify return values or expected
parameters values is more often than not all that is required in a
unit test.
I guess that applies to a different context -- one where the framework
actually uses magic rather than standing in the way. Still, I can't see
the 'save' part. The code we talk about is:
Logger * pLogger;
Logger& GetLogger() { return pLogger;}
That is it. All of it. And one extre assignment to pLogger per test case
-- replacing the one extra param per invocation in the PFA alternative.
bool TestWithPFA
{
MyLoger l;
foo1(1,2,3, l);
foo2(2,3,4, l);
foo3(2,2,2, l);
}
bool TestWithSingleton
{
MyLoger l; pLogger = &l;
foo1(1,2,3);
foo2(2,3,4);
foo3(2,2,2);
}
Unless certainly the test is not interested in the singleton object's
state, then it is even simpler:
NullLogger l;
Logger& GetLogger() { return l;}
and the cases skip the fist line.
I repeat my original question: what the heck can possibly be that
test-ruining boogie related to singleton usage?
While for this subthread: what value a framework adds to this, and why
is it really needed?
--
[ See http://www.gotw.ca/resources/clcm.htm for info about ]
[ comp.lang.c++.moderated. First time posters: Do this! ]