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

ColdBox 8.1.0 Released β€” AI Routing, MCP, and BoxLang-First Power! πŸš€

ColdBox 8.1.0 Released β€” AI Routing, MCP, and BoxLang-First Power! πŸš€

We are thrilled to announce ColdBox 8.1.0, a targeted minor release packed with powerful new features, important improvements, and critical bug fixes across ColdBox, WireBox, and CacheBox. While minor in version number, this release delivers some truly exciting capabilities β€” especially for BoxLang developers building AI-powered applications.

Luis Majano
Luis Majano
April 14, 2026
ColdFusion Modernization for UK Universities Without Downtime

ColdFusion Modernization for UK Universities Without Downtime

Across the United Kingdom, many universities still rely on legacy ColdFusion and CFML systems to power student portals, enrollment platforms, research databases, payment gateways, and internal academic workflows.

These systems are often:

  • 15 to 25 years old
  • Mission-critical
  • Deeply integrated with student information systems
  • Running on older Adobe ColdFusion or Lucee versions
  • Tightly coupled monolithi...

Cristobal Escobar
Cristobal Escobar
April 13, 2026