Improved workaround for the template method limitation

git-svn-id: https://svn.code.sf.net/p/turtle/code/trunk@702 860be788-9bd5-4423-9f1e-828f051e677b
This commit is contained in:
mat007 2013-12-21 18:20:49 +00:00
parent e61a52e683
commit e4e6d59a35
2 changed files with 59 additions and 9 deletions

View file

@ -2,6 +2,8 @@
#include <boost/test/auto_unit_test.hpp>
#include <turtle/mock.hpp>
namespace limitations_template_method_problem
{
//[ limitations_template_method_problem
class concept
{
@ -12,15 +14,11 @@ public:
};
template< typename T >
class client
{
public:
client( T t ) // T is supposed to model the previous concept
void function_under_test( T t ) // T is supposed to model the previous concept
{
t.method( 42 );
t.method( "string" );
}
};
//]
//[ limitations_template_method_solution
@ -30,4 +28,48 @@ MOCK_CLASS( mock_concept )
MOCK_METHOD( method, 1, void( const char* ), method_string )
};
//]
}
namespace limitations_template_method_problem_2
{
//[ limitations_template_method_problem_2
class concept
{
public:
template< typename T >
T create()
{
return T();
}
};
template< typename T >
void function_under_test( T t ) // T is supposed to model the previous concept
{
t.create< int >();
t.create< std::string >();
}
//]
//[ limitations_template_method_solution_2
MOCK_CLASS( mock_concept )
{
template< typename T >
T create();
template<>
int create< int >()
{
return create_int();
}
template<>
std::string create< std::string >()
{
return create_string();
}
MOCK_METHOD( create_int, 0, int(), create_int )
MOCK_METHOD( create_string, 0, std::string(), create_string )
};
//]
}

View file

@ -56,7 +56,15 @@ writing a mock object modeling 'concept' requires to list all the possible versi
[limitations_template_method_solution]
While still somewhat possible, mocking a template method is indeed a bit cumbersome.
However if one or more template parameters must be explicitly specified as in :
[limitations_template_method_problem_2]
delegate methods must be manually added :
[limitations_template_method_solution_2]
While still somewhat possible, mocking a template method can indeed prove a bit cumbersome.
[endsect]