Sedona

Testing

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:

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:

  1. Ensure that your scode image includes test code by setting the sedonaCode.test attribute to true in your scode XML build file.
  2. If you need to free up extra memory, or wish to narrow the tests to run, you can set the depend.test attribute on each kit element in your scode XML build file. This allows you to include or exclude test code on a kit by kit basis (if sedonaCode.test is false then these attributes are ignored).
  3. Ensure the main attribute is set to sys::Sys.main in your scode XML build file
  4. Build the test version of your scode
  5. Run the VM using the "-test"" argument, which will execute all the test methods and report assert successes and failures:
    svm kits.scode -test