A tactical testing framework is a framework which supports what I am calling TacticalTesting
. In my opinion, this is not revolutionary stuff, it's evolutionary from existing TestingFrameworks
. There are still ideas from TacticalTesting
that haven't found a home. BTW, I haven't made a TacticalTestingFramework
, this is my ideas on what I would want from a testing framework.
The testing framework is an environment which supports UnitTest
ing for a piece of code called a CodeUnit?
. This piece of code has been written to support the testing framework, so it has ClassInvariant
testing coded in, and uses a BugReportingFramework
. The tripartite inner box on the left is all the code under test, though the BugReportingFramework
is a standard module which has been linked in.
is not a trivial nor deterministic piece of code - it has an interface to an ExternalSystem?
which may be a CORBA server, database, real-time data feed, I dunno. The CodeUnit?
also has a public interface, which is the interface through which users will typically use the system. (I am trying to figure out whether the external interface and the public interface have any important differences - are we testing just the public interface or both of them?)
[an image may be missing here
The pink arrows denote data flow through the system. The testing framework is responsible for the ends of any arrows which nobody else owns. Because no arrows leave the outer box, the testing framework has complete control of the environment of the code unit under test.
The testing framework is responsible for:
- faking the behaviour of the external interface
- running the tests which exercise the public interface
- helping to check the output of the public interface
- invoking the class invariant to check consistency
- showing bugs found in the tests, and also those reported to the bug reporting system as side effects of the tests
The code unit must:
- implement a code invariant (optional, really)
- reporting bugs it detects to the bug reporting system, whether they affect behaviour or not
- accepting fake implementations of external interfaces
The tactical testing techniques used in this framework are: