We propose a new language-independent, structural test adequacy criterion called state coverage. State coverage measures whether unit-level tests check the outputs and side effects of a program. State coverage differs in several respects from existing test adequacy criteria, such as code coverage and mutation adequacy. Unlike other coverage-based criteria, state coverage measures the extent of checks of program behavior. And unlike existing fault-based criteria such as mutation adequacy, state coverage has been designed to be readily automated and to present users with easily understood test inadequacy reports. An experiment showed strong positive correlations between the number of behavior checks and both state coverage and mutation adequacy. Categories and Subject Descriptors: D.2.5 [Software Engineering]: Testing and Debugging?testing tools; D.2.8 [Software Engineering]:Metrics General Terms: Measurement, Reliability