Test-Related Code Annotation and Runtime System: As useful as test systems like JUnit are, test cases do require a significant amount of work to create and maintain, especially since they are implemented outside of the SUT sources, and need to be kept up to date with SUT changes.
It is therefore desirable to have an annotation system for in-source specification of tests; that is, to keep test cases next to the SUT functions they refer to. However, such an annotation system has to meet several requirements in order to be effective and gain acceptance:
A) The test specification format must be easy to read, preferably using target language expressions (like "foo(20) < 42").
B) The format must be concise enough to avoid cluttering SUT sources with test annotations (for example, not greater than 20% of the non test related lines of code), which especially requires a notation for input data variation.
C) The annotation cannot produce code that might interfere with the SUT, otherwise it would violate the “test-what-you-fly/fly-what-you-test” principle.
D) Test property types should be extensible and configurable, depending on which runtime execution system is used.
Since such a system is meant to be the first line of verification efforts (particularly for low-level function tests), its most important aspect is that it actually makes life easier for the developer,mitigating the burden of creating and maintaining a separate body of test code.