Using a Flush Policy
How Clover writes coverage data to disk at runtime can be configured by changing Clover's flush policy. Clover provides three policies: directed
, interval
and threaded
. The default mode is directed
. The flush policy is set at instrumentation time, either via the <clover-setup>
Ant task, or via the IDE plugin configuration screen.
Which flush policy you choose depends on the runtime environment in which the instrumented code is executing. In the most common unit testing scenarios, the default flush policy will suffice. In situations where instrumented code is executing in a hosted environment (e.g. a J2EE container) and shutting down the JVM at the end of testing is not desirable, you will want to use one of the interval-based flush policies:
directed
default. Coverage recordings are flushed only when the hosting JVM is shut down, or where the user has directed a flush using the ///CLOVER:FLUSH
inline directive. Directed flushing has the lowest runtime performance overhead of all flush policies (depending on the use of the flush inline directive). Note that no coverage recordings will be written if the hosting JVM is not shut down, or if the hosting JVM terminates abnormally.
interval
The interval
policy flushes as per the directed policy, and also at a maximum rate determined by the interval set at instrumentation time (see the flushinterval
attribute on <clover-setup>
). The interval
mode is a 'passive' mode in that flushing potentially occurs only while instrumented code is still being executed. There exists the possibility that coverage data recorded just prior to the end of execution of instrumented code may not be flushed, because the flush interval has not elapsed between the last flush and the end of execution of instrumented code. Any coverage not flushed in this manner will be flushed if/when the hosting JVM shuts down. The interval
policy should be used in environments where shutdown of the hosting JVM is not practical and thread creation by Clover is not desired. If you don't mind Clover creating a thread, use the threaded
policy. Runtime performance overhead is determined by the flush interval.
threaded
The threaded
policy flushes as per the directed policy, and also at a rate determined by the interval set at instrumentation time (see the flushinterval
attribute on <clover-setup>
). The threaded
mode starts a separate thread to perform flushes. The threaded
policy should be used in environments where shutdown of the hosting JVM is not practical. Runtime performance overhead is determined by the flush interval.