01: /*
02: * Copyright 2002-2006 the original author or authors.
03: *
04: * Licensed under the Apache License, Version 2.0 (the "License");
05: * you may not use this file except in compliance with the License.
06: * You may obtain a copy of the License at
07: *
08: * http://www.apache.org/licenses/LICENSE-2.0
09: *
10: * Unless required by applicable law or agreed to in writing, software
11: * distributed under the License is distributed on an "AS IS" BASIS,
12: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13: * See the License for the specific language governing permissions and
14: * limitations under the License.
15: */
16:
17: package org.springframework.test;
18:
19: import junit.framework.TestCase;
20: import org.apache.commons.logging.Log;
21: import org.apache.commons.logging.LogFactory;
22:
23: /**
24: * Superclass for tests that allows conditional test execution
25: * at individual test method level.
26: *
27: * The <code>isDisabledInThisEnvironment</code> method is invoked before the
28: * execution of each test method. Subclasses can override that method to return
29: * whether or not the given test should be executed. Note that the tests will
30: * still appear to have executed and passed; log output will show that the test
31: * was not executed.
32: *
33: * @author Rod Johnson
34: * @since 2.0
35: * @see #isDisabledInThisEnvironment
36: */
37: public abstract class ConditionalTestCase extends TestCase {
38:
39: private static int disabledTestCount;
40:
41: /** Logger available to subclasses */
42: protected final Log logger = LogFactory.getLog(getClass());
43:
44: /**
45: * Default constructor for ConditionalTestCase.
46: */
47: public ConditionalTestCase() {
48: }
49:
50: /**
51: * Constructor for ConditionalTestCase with a JUnit name.
52: */
53: public ConditionalTestCase(String name) {
54: super (name);
55: }
56:
57: public void runBare() throws Throwable {
58: // getName will return the name of the method being run
59: if (isDisabledInThisEnvironment(getName())) {
60: recordDisabled();
61: logger.info("**** " + getClass().getName() + "."
62: + getName() + " disabled in this environment: "
63: + "Total disabled tests=" + getDisabledTestCount());
64: return;
65: }
66:
67: // Let JUnit handle execution
68: super .runBare();
69: }
70:
71: /**
72: * Should this test run?
73: * @param testMethodName name of the test method
74: * @return whether the test should execute in the current envionment
75: */
76: protected boolean isDisabledInThisEnvironment(String testMethodName) {
77: return false;
78: }
79:
80: /**
81: * Record a disabled test.
82: * @return the current disabled test count
83: */
84: protected int recordDisabled() {
85: return ++disabledTestCount;
86: }
87:
88: /**
89: * Return the number of tests disabled in this environment.
90: */
91: public static int getDisabledTestCount() {
92: return disabledTestCount;
93: }
94:
95: }
|