Blog

Luis Majano

March 09, 2011

Spread the word


Share your thoughts

A few folks have asked how you can leverage MXUnit and MockBox to mock a super class class.  Here is a simple example to showcase this:

Class Parent A

<cfcomponent name="A"> 
<!--- send ---> 
<cffunction access="public" hint="" name="send" output="false" returntype="any"> 
<cfreturn parent="">
</cffunction> 
</cfcomponent> 

Class Parent B

<cfcomponent extends="A" name="B"> 
	<!--- send ---> 
	<cffunction access="public" hint="" name="send" output="false" returntype="any"> 
		<cfargument default="" hint="" name="name" required="true" type="string"> 
		<cfif arguments.name neq ""> 
			<cfreturn name="arguments.name"> 
		<cfelse> 
			<cfreturn>
		</cfif> 
	</cffunction> 
</cfcomponent>

Here is our test case, please note that we use the coldbox package for simplicity, if you are using mockbox standalone, then just follow the docs.

<cfcomponent extends="coldbox.system.testing.BaseTestCase">
<cfscript> 
function setup(){ 
    // create and prepare for mocking. 
    b = getMockBox().prepareMock( createObject("component","B") ); 
} 

function testSend(){ 
    // create a virtual super scope and mock a send method on it 
    mockSuper = getMockBox().createStub().$("send","Mocked Super"); 
    
    // inject the mock super into the variables scope 
    b.$property("super","variables", mockSuper); 
    
    // send method call 
    r = b.send(); 
    
    // use simple mxunit debug to show results. 
    debug(r); 
} 
</cfscript>
</cfcomponent>

So as you can see, the super scope is just another reference in the variables scope, so I can easily create a MockBox stub and mock away. You can also be more concise if you want to leave the methods intact in the super scope by creating a mock of the parent class:

getMockBox().createMock("A").$("send","Mocked Super");

 

Add Your Comment

(2)

Mar 10, 2011 09:03:09 UTC

by Chris Tierney

Thanks Luis for this great write up! What is you opinion on mocking a super class? Should it be mocked as the example provides or should it generally be treated as an all-in-one?

May 14, 2013 12:43:43 UTC

by duncan

Thanks for this useful post. It's a shame the blog has screwed up the layout of the code block. Also the date of the post is reading as 1111 for the year

Recent Entries

Speaker Featuring - Round 1

Speaker Featuring - Round 1

Every conference is more than the talks we see on stage it’s also the story of the people who make it possible.

With the first round of Into the Box 2026 sessions and workshops now live, we’re excited to introduce some of the speakers who will be joining us this year. These community members, practitioners, and Ortus team experts bring decades of real-world experience across CFML, BoxLang, JVM modernization, testing, AI, and cloud-native development.

Victor Campos
Victor Campos
January 26, 2026
First Round of the Into the Box 2026 Agenda Is Live

First Round of the Into the Box 2026 Agenda Is Live

Into the Box 2026 marks an important moment for the CFML and BoxLang community not just because of what’s on the agenda, but because of what it represents: 20 years of Ortus Solutions helping teams move forward, modernize, and build with confidence.

Victor Campos
Victor Campos
January 21, 2026
BoxLang AI v2: Enterprise AI Development Without the Complexity

BoxLang AI v2: Enterprise AI Development Without the Complexity

One Year. 100+ Features. Unlimited Possibilities.

Just one year ago, in March 2024, we launched BoxLang AI 1.0. Today, we're thrilled to announce BoxLang AI v2—a massive leap forward that positions BoxLang as the most powerful and versatile AI framework on the JVM.

Luis Majano
Luis Majano
January 19, 2026