Testing Tool (Specification)
Contents
Main functionalities
Add unit/system level tests
Semantically there is no difference between unit tests and system level tests. This way all tests can be written in Eiffel in a conforming way.
A test is a routine having the prefix test in a class inheriting from TEST_SET. In general features in classes specifically used for testing should be exported at most to {TESTING_CLASS}. This is to prevent testing code from remaining in a finalized system. If you write a helper class for your test routines, let it inherit from TESTING_CLASS (Note: TEST_SET already inherits from TESTING_CLASS). Additionally you should make leaf test sets frozen and make sure you never directly reference testing classes in your project code.
Example unit tests test_append and test_boolean
frozen class TEST_STRING inherit TEST_SET redefine set_up end feature {NONE} -- Initialization set_up do create s.make (10) end feature {TESTING_CLASS} -- Access s: STRING feature {TESTING_CLASS} -- Test routines test_append require set_up: s /= Void and then s.is_empty do s.append ("12345") assert_string_equality ("append", s, "12345") end test_boolean require set_up: s /= Void and then s.is_empty do s.append ("True") assert_true ("boolean", s.is_boolean and then s.to_boolean) end end
Example system level test test_version (Note: SYSTEM_LEVEL_TEST_SET inherits from TEST_SET and provides basic functionality for executing external commands, including the system currently under development):
frozen class TEST_MY_APP inherit SYSTEM_LEVEL_TEST_SET feature {TESTING_CLASS} -- Test routines test_version do run_system_with_args ("--version") assert_string_equality ("version", last_output, "my_app version 0.1") end end
System level test specifics
Since system level testing often relies on external items like files, SYSTEM_LEVEL_TEST_SET provides a number of helper routines accessing them.
Config file
For each target in a configuration file you may define a testing folder in which test classes, but also other files needed for testing can be put there.
Note: special testing folder is needed when automatically creating new test cases. Also system level tests rely on a location for files etc...
Manage and run test suite
This is what a screen shot of the above example could look like: