UnitTester: Test-Driven Development for 4D v11

UnitTester provides a robust unit testing framework for 4D v11 as well as development tools to facilitate test-driven development for both individual developers and developer teams. Adopt test-driven development by adding UnitTester to your toolchest and enjoy higher productivity, improved code quality, easy and fun regression testing, and lower maintenance costs.

Who is UnitTester for?

UnitTester is for 4D developers that recognize the value of maintaining a robust automated set of tests. Have you ever fixed a bug or implemented a new feature only to find that the fix or new feature caused existing functions to break? Of course, we've all experienced this scenario. If the embarassment of regressions like this is unacceptable to you, then you should be unit testing.

Why Unit Test?

The ultimate goal of unit testing is to provide fast and automated regression testing. Regression testing is testing for the exact situation described in the previous paragraph. We are testing for a regression in our code, meaning new breakages of previously working code.

There is a lot of literature on the value of unit testing. I've provided some links to unit testing articles on the right.

UnitTester's Features

  • Unit Testing Framework of methods for creating tests
  • Test-driven development facilitation
  • Method Creator tool that enforces naming conventions and automatically generates test case methods for production methods
  • Test runner GUI
  • Application build automation (great for building components!)
  • 4D Pop integration
  • Does not add tables to your structure
  • Can be removed for deployment

Benefits of Unit Testing

  • Enables regression testing: add or change code and tell immediately whether it breaks other code, and if so exactly what code is broken. This removes a lot of stress from working on complex software, and is especially useful if you use some sort of version control.
  • Makes you write better code: when practicing test-driven development (TDD), forces you to think of all possible ways your code can break before you write the actual production code. You end up writing more code correct the first time, which translates into lower maintenance costs.