Overview
We all love test driven development! The Sedona Framework comes with built-in support for writing and running unit tests. You won't have any excuses to skip unit testing. The test framework is based upon the following principles:
- Bundled with Kits: the goal of the test framework is to enable you to bundle unit tests for each kit with the kit itself
- Test Only Code: a set of classes within a kit is marked test only so that we can include or exclude test code easily
- Test Methods: classes that extend
sys::Testare automatically scanned for test methods and added to the test harness - Test Harness: the Sedona Framework runtime includes a harness to automatically run all the tests for a given scode image
Test Only
Because the Sedona Framework targets very resource constrained devices, we need
to maximize every byte available. So the compiler lets you
mark which classes are test code versus normal runtime code. The
standard mechanism to do this is via the test attribute
in your "kit.xml" build file:
<source dir="." /> <source dir="test" testonly="true"/>
The XML above illustrates a kit build file that
contains two source directories. The "." directory contains the
normal runtime classes. On the other hand, all the classes defined
in the "test" directory are automatically marked test only. If
you look at the IR for these classes you will see each test class
annotated with the @testonly facet. Convention is to
place all test code in a subdirectory called "test" inside your source folder.
Test Methods
Tests are organized into test classes, which are classes that
extend sys::Test. Every method inside
a test class whose name starts with "test" is a test method.
Test methods are the primary unit of test execution. Test methods
must be public, static, non-native methods that return void and
declare no parameters.
Each test method should be designed to test a single feature or
function of your kit's code. The test is implemented using
one or more assert statements. This is an example
test class for testing sys::Str:
class StrTest extends Test
{
static void testEquals()
{
assert("a".equals("a"))
assert(!"a".equals("x"))
}
}
Test Harness
Follow these steps to run the test harness:
- Ensure that your scode image includes test code by
setting the
sedonaCode.testattribute totruein your scode XML build file. - If you need to free up extra memory, or wish to narrow
the tests to run, you can set the
depend.testattribute on eachkitelement in your scode XML build file. This allows you to include or exclude test code on a kit by kit basis (ifsedonaCode.testisfalsethen these attributes are ignored). - Ensure the
mainattribute is set tosys::Sys.mainin your scode XML build file - Build the test version of your scode
- Run the VM using the "
-test"" argument, which will execute all the test methods and report assert successes and failures:
svm kits.scode -test