Annotation for "virtual" implementation classes. These are classes that have
the following attributes:
- they implement a public interface or are a concrete implementation of a
public abstract class,
- they are not public,
- instances can only be retrieved through some kind of factory method.
Example: {@code MessageDigest} is an abstract class. Concrete implementations
of message digest algorithms such as MD5 and SHA-1 can only be retrieved
through one of the static {@code getInstance} methods of
{@code MessageDigest}, which accept the desired algorithm as a string
parameter and return an implementation accordingly.
Even though the concrete implementation class for a message digest algorithm
is not known, we need to be able to indicate that such a class exists and
that it must be tested. This is done by defining corresponding classes and
annotating them with {@code @VirtualTestTarget}. This class can then be
used in the {@code @TestTargetClass} annotation with which we annotate
{@code TestCase} subclasses. |