mirror of
https://github.com/mat007/turtle.git
synced 2026-06-22 12:13:43 +00:00
Added support for mocking constructors
git-svn-id: https://svn.code.sf.net/p/turtle/code/trunk@433 860be788-9bd5-4423-9f1e-828f051e677b
This commit is contained in:
parent
2768c8b172
commit
d1eed46173
2 changed files with 56 additions and 8 deletions
|
|
@ -90,7 +90,8 @@ namespace detail
|
||||||
|
|
||||||
#define MOCK_METHOD_EXPECTATION(S, t) \
|
#define MOCK_METHOD_EXPECTATION(S, t) \
|
||||||
mutable mock::function< S > t##_mocker_; \
|
mutable mock::function< S > t##_mocker_; \
|
||||||
mock::function< S >& t##_mocker( const mock::detail::context&, \
|
mock::function< S >& t##_mocker( \
|
||||||
|
const mock::detail::context&, \
|
||||||
boost::unit_test::const_string instance ) const \
|
boost::unit_test::const_string instance ) const \
|
||||||
{ \
|
{ \
|
||||||
mock::detail::configure( *this, t##_mocker_, \
|
mock::detail::configure( *this, t##_mocker_, \
|
||||||
|
|
@ -136,10 +137,6 @@ namespace detail
|
||||||
MOCK_METHOD_STUB(M, n, S, t,, BOOST_DEDUCED_TYPENAME) \
|
MOCK_METHOD_STUB(M, n, S, t,, BOOST_DEDUCED_TYPENAME) \
|
||||||
MOCK_METHOD_EXPECTATION(S, t)
|
MOCK_METHOD_EXPECTATION(S, t)
|
||||||
|
|
||||||
#define MOCK_DESTRUCTOR(T, t) \
|
|
||||||
~T() { MOCK_ANONYMOUS_MOCKER(t).test(); } \
|
|
||||||
MOCK_METHOD_EXPECTATION(void(), t)
|
|
||||||
|
|
||||||
#define MOCK_CONST_CONVERSION_OPERATOR(T, t) \
|
#define MOCK_CONST_CONVERSION_OPERATOR(T, t) \
|
||||||
operator T() const { return MOCK_ANONYMOUS_MOCKER(t)(); } \
|
operator T() const { return MOCK_ANONYMOUS_MOCKER(t)(); } \
|
||||||
MOCK_METHOD_EXPECTATION(T(), t)
|
MOCK_METHOD_EXPECTATION(T(), t)
|
||||||
|
|
@ -151,13 +148,33 @@ namespace detail
|
||||||
operator T() { return MOCK_ANONYMOUS_MOCKER(t)(); } \
|
operator T() { return MOCK_ANONYMOUS_MOCKER(t)(); } \
|
||||||
MOCK_METHOD_EXPECTATION(T(), t)
|
MOCK_METHOD_EXPECTATION(T(), t)
|
||||||
|
|
||||||
#define MOCK_FUNCTION_STUB(F, n, S, t, s, tpn) \
|
#define MOCK_FUNCTION_EXPECTATION(S, t, s) \
|
||||||
s mock::function< S >& t##_mocker( mock::detail::context& context, \
|
s mock::function< S >& t##_mocker( \
|
||||||
|
mock::detail::context& context, \
|
||||||
boost::unit_test::const_string instance ) \
|
boost::unit_test::const_string instance ) \
|
||||||
{ \
|
{ \
|
||||||
static mock::function< S > f; \
|
static mock::function< S > f; \
|
||||||
return f( context, instance ); \
|
return f( context, instance ); \
|
||||||
} \
|
}
|
||||||
|
|
||||||
|
#define MOCK_CONSTRUCTOR_STUB(T, n, A, t, tpn) \
|
||||||
|
MOCK_FUNCTION_EXPECTATION(void A, t, static) \
|
||||||
|
T( MOCK_ARGS(n, void A, tpn) ) \
|
||||||
|
{ \
|
||||||
|
MOCK_MOCKER(t)( BOOST_PP_ENUM_PARAMS(n, p) ); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define MOCK_CONSTRUCTOR(T, n, A, t) \
|
||||||
|
MOCK_CONSTRUCTOR_STUB(T, n, A, t,)
|
||||||
|
#define MOCK_CONSTRUCTOR_TPL(T, n, A, t) \
|
||||||
|
MOCK_CONSTRUCTOR_STUB(T, n, A, t, BOOST_DEDUCED_TYPENAME)
|
||||||
|
|
||||||
|
#define MOCK_DESTRUCTOR(T, t) \
|
||||||
|
~T() { MOCK_ANONYMOUS_MOCKER(t).test(); } \
|
||||||
|
MOCK_METHOD_EXPECTATION(void(), t)
|
||||||
|
|
||||||
|
#define MOCK_FUNCTION_STUB(F, n, S, t, s, tpn) \
|
||||||
|
MOCK_FUNCTION_EXPECTATION(S, t, s) \
|
||||||
s MOCK_DECL(F, n, S,,tpn) \
|
s MOCK_DECL(F, n, S,,tpn) \
|
||||||
{ \
|
{ \
|
||||||
return MOCK_MOCKER(t)( BOOST_PP_ENUM_PARAMS(n, p) ); \
|
return MOCK_MOCKER(t)( BOOST_PP_ENUM_PARAMS(n, p) ); \
|
||||||
|
|
|
||||||
|
|
@ -275,6 +275,37 @@ BOOST_FIXTURE_TEST_CASE( basic_mock_object_collaboration_usage, fixture )
|
||||||
subject.increment();
|
subject.increment();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
MOCK_CLASS( my_constructed_class )
|
||||||
|
{
|
||||||
|
MOCK_CONSTRUCTOR( my_constructed_class, 2, ( int, const std::string& ), constructor )
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE( mocking_a_constructor )
|
||||||
|
{
|
||||||
|
MOCK_EXPECT( my_constructed_class::constructor ).with( 42, "some text" ).once();
|
||||||
|
my_constructed_class( 42, "some text" );
|
||||||
|
BOOST_CHECK( MOCK_VERIFY( my_constructed_class::constructor ) );
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace
|
||||||
|
{
|
||||||
|
template< typename T >
|
||||||
|
MOCK_CLASS( my_constructed_template_class )
|
||||||
|
{
|
||||||
|
MOCK_CONSTRUCTOR_TPL( my_constructed_template_class, 2, ( T, const std::string& ), constructor )
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOST_AUTO_TEST_CASE( mocking_a_template_class_constructor )
|
||||||
|
{
|
||||||
|
MOCK_EXPECT( my_constructed_template_class< int >::constructor ).with( 42, "some text" ).once();
|
||||||
|
my_constructed_template_class< int >( 42, "some text" );
|
||||||
|
BOOST_CHECK( MOCK_VERIFY( my_constructed_template_class< int >::constructor ) );
|
||||||
|
}
|
||||||
|
|
||||||
namespace
|
namespace
|
||||||
{
|
{
|
||||||
MOCK_CLASS( my_destroyed_class )
|
MOCK_CLASS( my_destroyed_class )
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue