Blog

Luis Majano

April 29, 2020

Spread the word


Share your thoughts


We are excited to announce a major version release of TestBox version 4.0.0. To install just use CommandBox: install testbox --saveDev or to update your TestBox installation update testbox. So let's explore this release:

 

What's New With 4.0.0

TestBox 4.0.0 is a major release. It has compatibility changes that you should be aware of and lots of good features!

 

Compatibility

The major compatibility issues are the engine support removals:

  • Lucee 4.5 Support Dropped
  • Adobe ColdFusion 11 Dropped
 

Updating

It is easy to update, just type update testbox and you are done!

 

Major Features

 

TestBox Output Utilities

Sometimes you need to dump something that is in the CFC you are testing or maybe an asynchronous test. The debug() method is only accessible from your test bundle, so getting to the TestBox output utilities is not easy. We have now implemented the testing utilities into the request scope as request.testbox

This utility struct provides you with the following methods:

MethodComment
console()Send output to the console
debug()Send output to the TestBox reporter debugger
clearDebugBuffer()Clear the debugger
print()Send output to the ColdFusion output buffer
printLn()Same as print() but adding a <br> separator

This way in your code you can add them for better debugging, especially when testing async code:


request.testbox.console( "I am here" )
request.testbox.debug( "why is this not running" )
 

Mocking Data

We have included MockDataCFC as a dependency to TestBox 4. This will allow you to mock not only objects but data as well. You can access the mocking method via the new mockData() method in all your specs. This feature is a life-saver when mocking APIs or data within your applications.


# Array of objects
var data = mockData(
    $num = 3,
    "author" = "name",
    "id" = "uuid"
);

# An object
var data = mockData(
    $returnType = "struct",
    "author" = "name",
    "id" = "uuid"
);

Let's imagine the following object graph:


Author
    Has Many Books
        Has Many Categories
    Has Keywords
    Has A Publisher

I can then use this mocking DSL to define it:


mockData(
    fullName    = "name",
    description = "sentence",
    age         = "age",
    id          = "uuid",
    createdDate = "datetime",
    isActive	= "oneof:true:  false",

    // one to many complex object definitions
    books = [
        {
            $num = "rand:1:         3",
            "id" = "uuid",
            "title" = "words:1:         5",
            "categories" = {
                "$num"      = "2",
                "id"        = "uuid",
                "category"  = "words"
            }
        }
    ],

    // object definition
    publisher = {
        "id" 	= "uuid",
        "name" 	= "sentence"
    },

    // array of values
    keywords = [
        {
            "$num" 	= "rand:1:         10",
            "$type" = "words"
        }
    ]
);

More information here: https://www.forgebox.io/view/mockdatacfc

 

Release Notes

 

Bugs

  • [TESTBOX-275] - Exception in beforeTests/afterTests not reported in a meaningful way on the ANT Junit Reporter
  • [TESTBOX-278] - Fix the coverage % in HTML visualizer
 

New Features

  • [TESTBOX-274] - New testbox output utilities struct: request.testbox
  • [TESTBOX-276] - MockdataCFC is now a first class module in TestBox
  • [TESTBOX-277] - New mockData() method in your base specs so you can mock any type of data
  • [TESTBOX-280] - Add cfconfig.json for controlling output and consistency between testing in diff engines
 

Tasks

Add Your Comment

Recent Entries

Your ColdFusion Upgrade Passed. Did Your Business Workflows?

Your ColdFusion Upgrade Passed. Did Your Business Workflows?

The server restarted. The administrator shows the expected version. Your homepage loads, and a few familiar screens look fine.

Would you tell the business the upgrade is complete?

Consider an illustrative scenario: a customer submits an order after an upgrade. The application saves it and displays a confirmation page. But the confirmation email never arrives, and the scheduled process that sends the order to fulfillment has not completed.

From the browser, the transaction...

Maria Jose Herrera
Maria Jose Herrera
October 22, 2026
Updating Adobe ColdFusion isn't always just installing the latest patch

Updating Adobe ColdFusion isn't always just installing the latest patch

Keeping Adobe ColdFusion updated is an important part of maintaining a secure and reliable application environment.

But applying a ColdFusion update is not always as simple as installing the latest patch and restarting the server.

Updates can include security fixes, library upgrades, JVM-related changes, changes to the ColdFusion Administrator, updated packages, bug fixes, and changes in runtime behavior. Most updates will not cause problems for most applications. But when you'r...

Cristobal Escobar
Cristobal Escobar
October 21, 2026
BoxLang AI 3.6: Your Agent Now Has Eyes, Ears, and a Voice

BoxLang AI 3.6: Your Agent Now Has Eyes, Ears, and a Voice

Ortus Solutions today announces BoxLang AI 3.6, the release that connects the AI framework to the rest of the BoxLang productivity platform. Your agents can now drive a real browser via bx-playwright, speak and master audio via bx-audio, stream text-to-speech token by token, talk to any MCP server over stdio — and do all of it with the same fluent BoxLang syntax they always have.

Luis Majano
Luis Majano
October 20, 2026