The primary types of features to test include:
Main stream functionality
Mainstream functionality is the expected use of each public
method for a service. Care should be taken to ensure that the mainstream methods
are tested 100%.
Boundary conditions
Boundary condition tests execute methods to the limits of
what their expected functionality is. An example would be sending
Integer.MAX_VALUE and
Integer.MIN_VALUE to a method
that is designed to handle all valid integers.
Expected exceptions
This type of test should verify that the proper exceptions
are thrown from methods when
Performance tests
A performance test is designed to verify and report on the
speed or throughput of a particular service. Performance tests are different
from other tests in that they should be kept apart from the primary test
harnesses and in that they often take significantly longer than the normal test
cycle execution. These tests are not required for every service, but are a good
idea for any services that may possibly be used very often or in a highly
concurrent manner.
Concurrency tests
Concurrency is the interaction of different streams of
execution in a multithreaded environment. Concurrency tests are normally the
execution of multiple threads testing the same or different functionality
exposed by a single service. These tests are most often considered to be part of
performance tests and do not usually run as part of the primary testing
structure for a service. These tests are designed to verify the synchronization
methods of services that utilize shared resources and should be considered a
form of severe stress testing. This type of testing is highly recommended for
any service that contains synchronization.